有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java字符串方法,用单个空格替换2个或更多空格的所有序列

我试图用一个空格替换字符串中两个或更多空格的所有序列

我已经用绳子把它弄到手了。修剪()。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();
}

共 (1) 个答案

  1. # 1 楼答案

    你真的不需要布尔人。只需跟踪指数即可。请记住,一次删除一个字符是非常昂贵的,因为使用这些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 + "\"");