【问题标题】:Java string method that replaces all sequences of 2 or more spaces with a single space用单个空格替换所有 2 个或更多空格序列的 Java 字符串方法
【发布时间】:2019-12-06 18:00:58
【问题描述】:

我正在尝试用单个空格替换字符串中两个或多个空格的所有序列。

我已经使用 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();
}

【问题讨论】:

标签: java string replace whitespace stringbuilder


【解决方案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 + "\"");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-04
    • 2011-02-25
    • 2012-01-11
    • 2014-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多