簡體   English   中英

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

[英]java: what's the most efficient way to remove all blank space from a StringBuilder

我通過以下代碼實現它,但我不知道是否有更有效的方法從 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;
}

您不應多次調用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);
}

編輯:留下這個答案為后代, 但基思蘭德爾的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;
}

如下所示(假設您已初始化StringBuilder sb ):

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

用於刪除字符串的前導和尾隨空格的代碼

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

 }

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  

我認為這種方式非常簡潔:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM