[英]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.