我通过以下代码实现它,但我不知道是否有更有效的方法从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;
}
答案 0 :(得分:10)
您不应多次拨打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);
}
答案 1 :(得分:3)
编辑:将这个答案留给后人,but Keith Randall's O(n) solution更好。
您可能会发现从远端工作效率更高 - 当您删除早期字符时,您将不会从以后复制空白。
此外,如果您的数据往往同时包含多个空白字符,您可能希望发现这一点,然后拨打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;
}
答案 2 :(得分:2)
以下内容(假设您已初始化StringBuilder sb
):
sb = new StringBuilder(sb.toString().replaceAll("\\s", ""));
答案 3 :(得分: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;
}
}
答案 4 :(得分:0)
java string trim()方法消除了前导和尾随空格。空格字符的unicode值是&#39; \ 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