java:从StringBuilder中删除所有空格的最有效方法是什么

wgeznvg7  于 2023-01-19  发布在  Java
关注(0)|答案(6)|浏览(222)

我通过下面的代码实现了它,但我不知道是否有更有效的方法来从StringBuilder中删除所有空格

private static StringBuilder removeBlankSpace(StringBuilder sb){
    for(int i=0;i<sb.length();++i){
        if(Character.isWhitespace(sb.charAt(i))){
            sb.deleteCharAt(i);
                            i--;
        }
    }
    return sb;
}
mcvgt66p

mcvgt66p1#

您不应该多次调用delete-只需将每个字符向下移动到其最终位置,然后删除末尾的范围。

static void removeBlankSpace(StringBuilder sb) {
  int j = 0;
  for(int i = 0; i < sb.length; i++) {
    if (!Character.isWhitespace(sb.charAt(i))) {
       sb.setCharAt(j++, sb.charAt(i));
    }
  }
  sb.delete(j, sb.length);
}
hts6caw3

hts6caw32#

编辑:把这个答案留给后代,but Keith Randall's O(n) solution要好得多。
您可能会发现从远端工作效率更高-因为这样在删除 early 字符时,您将不会从后面复制空白。
此外,如果数据中有多个空格字符,您可能希望发现这一点,并调用delete而不是deleteCharAt

private static StringBuilder removeBlankSpace(StringBuilder sb) {
    int currentEnd = -1;
    for(int i = sb.length() - 1; i >= 0; i--) {
        if (Character.isWhitespace(sb.charAt(i))) {
            if (currentEnd == -1) {
                currentEnd = i + 1;
            }
        } else {
            // Moved from whitespace to non-whitespace
            if (currentEnd != -1) {
                sb.delete(i + 1, currentEnd);
                currentEnd = -1;
            }
        }
    }
    // All leading whitespace
    if (currentEnd != -1) {
        sb.delete(0, currentEnd);
    }
    return sb;
}
egdjgwm8

egdjgwm83#

下面的代码怎么样(假设您已经初始化了StringBuilder sb):

sb = new StringBuilder(sb.toString().replaceAll("\\s", ""));
3j86kqsm

3j86kqsm4#

删除字符串的前导空格和尾随空格的代码

int i = 0;
 int j = 0;

 for (; i < whiteSpcaTest.length();) {
   i = 0;
   if (Character.isWhitespace(whiteSpcaTest.charAt(i))) {
     whiteSpcaTest.deleteCharAt(i);

   } else {
     break;
   }
 }
 for (; j >= 0;) {
   j = whiteSpcaTest.length() - 1;
   if (Character.isWhitespace(whiteSpcaTest.charAt(j))) {
     whiteSpcaTest.deleteCharAt(j);

   } else {
     break;
   }

 }
yx2lnoni

yx2lnoni5#

java字符串trim()方法删除前导和尾随空格。空格字符的unicode值为'\u0020'。java字符串中的trim()方法在字符串前后检查此unicode值,如果存在,则删除空格并返回省略的字符串。例如:

public class StringTrimExample{  
public static void main(String args[]){  
String s1="  hello string   ";  
System.out.println(s1+"javatpoint");//without trim()  
System.out.println(s1.trim()+"javatpoint");//with trim()  
}}

和结果:

hello string   javatpoint
hello stringjavatpoint
mrphzbgm

mrphzbgm6#

我觉得这样比较简洁:

void removeAll(StringBuilder sb, char c) {
  var length = sb.length();
  int i = 0;
  while (i < length) {
    if (sb.charAt(i) == c) {
      sb.deleteCharAt(i);
      length--;
    } else {
      i++;
    }
  }
}

相关问题