Java 字符串方法,将 2 个或更多 space 的所有序列替换为单个 space

Java string method that replaces all sequences of 2 or more spaces with a single space

我正在尝试用单个 space.

替换字符串中两个或多个白色 space 的所有序列

我已经使用 String.trim().replaceAll(" +", " ") 方法得到了它。

但我试图利用我所知道的自己解决这个问题,我接近了,想知道是否有人可以解决我必须解决的问题。

这是我的尝试:

StringBuilder sampleTextBuilder = new StringBuilder(sampleText);
for (int i = 0; i < sampleTextBuilder.length(); i++) {
            if (Character.isLetter(sampleTextBuilder.charAt(i))) {
                isLetter = true;
                isFirstWS = false;
            }
            else if (Character.isWhitespace(sampleTextBuilder.charAt(i)) && isLetter) {
                isFirstWS = true;
                isLetter = false;
            }
            else if (Character.isWhitespace(sampleTextBuilder.charAt(i)) && isFirstWS)  {
                sampleTextBuilder.deleteCharAt(i);
            }
            sampleText = sampleTextBuilder.toString();
}

你真的不需要布尔值。只需跟踪指数即可。请记住,一次删除一个字符的成本很高,因为这些 StringBuilder 方法在幕后进行了大量的数组复制。

还有一个微妙之处。当您从头开始迭代并删除字符时,所有字符都会向左移动一个位置。这可能需要额外的簿记。为了解决这个问题,你从右边开始迭代。然后当你删除一个字符时,它不会影响更左边的字符的相对位置。

      String sampleText = "This    is    a  test of    removing extra spaces";
      StringBuilder sampleTextBuilder = new StringBuilder(sampleText);
      for (int i = sampleTextBuilder.length() - 1; i >= 0; i--) {
         if (sampleTextBuilder.charAt(i) == ' ') {
            // found a space, check front and back of string.
            if (i == sampleTextBuilder.length() - 1 || i == 0) {
               sampleTextBuilder.deleteCharAt(i);
            }
            // otherwise, delete one of them if two are present.
            else if (sampleTextBuilder.charAt(i - 1) == ' ') {
               sampleTextBuilder.deleteCharAt(i - 1);
            }
         }
      }
      sampleText = sampleTextBuilder.toString();
      System.out.println("\"" + sampleText + "\"");