Java Regex that only replaces multiple whitepaces with Non-Breaking Spaces

后端 未结 3 2150
时光取名叫无心
时光取名叫无心 2020-12-11 06:12

I am looking for a Java regex way of replacing multiple spaces with non-breaking spaces. Two or more whitespaces should be replaced with the same number of non-breaking spa

相关标签:
3条回答
  • 2020-12-11 06:18

    Let's use some regex (black ?) magic.

    String testStr = "TESTING THIS  OUT   WITH    DIFFERENT     CASES";
    Pattern p = Pattern.compile(" (?= )|(?<= ) ");
    Matcher m = p.matcher(testStr);
    String res = m.replaceAll("&nbsp;");
    

    The pattern looks for either a whitespace followed by another one, or a whitespace following another one. This way it catches all blanks in a sequence. On my machine, with java 1.6, I get the expected result:

    TESTING THIS&nbsp;&nbsp;OUT&nbsp;&nbsp;&nbsp;WITH&nbsp;&nbsp;&nbsp;&nbsp;DIFFERENT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CASES
    
    0 讨论(0)
  • 2020-12-11 06:21

    Edit: This does not handle punctuation, and reworking it to handle punctuation would require it to use the same approach as Sergio's answer but with two steps instead of one. Therefore, this is an inadequate answer and has been withdrawn.


    Original answer below:

    The most straightforward way that I can think of is a two-step method.

    First, replace all spaces with "&nbsp;". This is pretty fast because it doesn't have to be a regex.

    String testStr = "TESTING THIS  OUT   WITH    DIFFERENT     CASES";
    String replaced = testStr.replace(" ", "&nbsp;");
    

    Next, replace any single instances of "&nbsp;" with spaces.

    String replaced2 = replaced.replaceAll("\\b&nbsp;\\b", " ");
    System.out.println(replaced2);
    

    Result:

    TESTING THIS&nbsp;&nbsp;OUT&nbsp;&nbsp;&nbsp;WITH&nbsp;&nbsp;&nbsp;&nbsp;DIFFERENT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CASES
    
    0 讨论(0)
  • 2020-12-11 06:45

    You could also skip the regex all together.

    String testStr = "TESTING THIS  OUT   WITH    DIFFERENT     CASES";
    String _replaced = testStr.replace("  ", "&nbsp;&nbsp;");
    String replaced = _replaced.replace("&nbsp; ", "&nbsp;&nbsp;");
    

    I haven't tested this but the first one finds all cases of two spaces and replaces them with non-breaking spaces. The second finds cases where there were an odd number of white-spaces and corrects it with two nbsps.

    0 讨论(0)
提交回复
热议问题