3

我通过以下代码实现它,但我不知道是否有更有效的方法可以从 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;
}
4

5 回答 5

11

您不应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);
}
于 2012-04-23T06:13:08.303 回答
3

编辑:将这个答案留给后代,但 Keith Randall 的 O(n) 解决方案要好得多。

您可能会发现从远端开始工作效率更高——因为这样当您删除早期字符时,您就不会再从后面复制空格了。

此外,如果您的数据往往同时包含多个空白字符,您可能希望发现它并调用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;
}
于 2012-04-23T05:57:01.440 回答
2

以下怎么样(假设您已经StringBuilder sb初始化):

sb = new StringBuilder(sb.toString().replaceAll("\\s", ""));
于 2012-04-23T05:58:06.697 回答
1

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

 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;
   }

 }
于 2015-11-29T18:31:33.057 回答
0

java string 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  
于 2017-12-19T11:41:31.177 回答