我想从字符串中删除前导和尾随空格:
String s = " Hello World ";
我希望结果如下:
s == "Hello world";
答案 0 :(得分:27)
s.trim()
没有任何内部方法,请使用正则表达式
s.replaceAll("^\\s+", "").replaceAll("\\s+$", "")
或
s.replaceAll("^\\s+|\\s+$", "")
或仅使用纯粹形式的模式
String s=" Hello World ";
Pattern trimmer = Pattern.compile("^\\s+|\\s+$");
Matcher m = trimmer.matcher(s);
StringBuffer out = new StringBuffer();
while(m.find())
m.appendReplacement(out, "");
m.appendTail(out);
System.out.println(out+"!");
答案 1 :(得分:3)
String s="Test ";
s= s.trim();
答案 2 :(得分:1)
使用String类trim方法。它将删除所有前导和尾随空格。
http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/String.html
答案 3 :(得分:1)
String s=" Hello World ";
s = s.trim();
了解更多信息See This
答案 4 :(得分:1)
我不喜欢使用正则表达式来处理琐碎的问题。这将是一个简单的选择:
public static String trim(final String s) {
final StringBuilder sb = new StringBuilder(s);
while (sb.length() > 0 && Character.isWhitespace(sb.charAt(0)))
sb.deleteCharAt(0); // delete from the beginning
while (sb.length() > 0 && Character.isWhitespace(sb.charAt(sb.length() - 1)))
sb.deleteCharAt(sb.length() - 1); // delete from the end
return sb.toString();
}
答案 5 :(得分:1)
String.trim()回答了问题,但对我来说不是一个选择。 如here所述:
它简单地将直到U + 0020(包括空格)的所有内容都视为空白,并将高于此的任何内容视为非空白。
这将导致它修剪U + 0020空格字符和U + 0020以下的所有“控制代码”字符(包括U + 0009制表符),但不修剪其上方的控制代码或Unicode空格字符。 / p>
我正在与日语一起工作,因为我们有全角字符Like this,String.trim()不会修剪全角空格。
因此,我做了一个函数,就像xehpuk的代码片段一样,使用了Character.isWhitespace()。 但是,此版本未使用StringBuilder,而是删除了字符,而是找到了从原始String中删除修剪后的子字符串所需的2个索引。
public static String trimWhitespace(final String stringToTrim) {
int endIndex = stringToTrim.length();
// Return the string if it's empty
if (endIndex == 0) return stringToTrim;
int firstIndex = -1;
// Find first character which is not a whitespace, if any
// (increment from beginning until either first non whitespace character or end of string)
while (++firstIndex < endIndex && Character.isWhitespace(stringToTrim.charAt(firstIndex))) { }
// If firstIndex did not reach end of string, Find last character which is not a whitespace,
// (decrement from end until last non whitespace character)
while (--endIndex > firstIndex && Character.isWhitespace(stringToTrim.charAt(endIndex))) { }
// Return substring using indexes
return stringToTrim.substring(firstIndex, endIndex + 1);
}
答案 6 :(得分:0)
s = s.trim();
更多信息: http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#trim()
为什么不想使用预定义的方法?它们通常效率最高。
答案 7 :(得分:0)
请参阅String#trim()方法
答案 8 :(得分:0)
只需使用 trim()。它仅消除字符串的开头和结尾多余的空格。
String fav =“我喜欢苹果”;
fav = fav.trim();
System.out.println(fav);
输出: 我喜欢苹果//字符串的开头和结尾都没有空格
答案 9 :(得分:0)
由于Java 11字符串类具有 strip()方法,该方法用于返回值为该字符串的字符串,并且已删除所有前导和尾随空白。引入它是为了解决修整方法的问题。
文档:https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html#strip()
示例:
String str = " abc ";
// public String strip()
str = str.strip(); // Returns abc
Java 11+ String类中还有两个有用的方法:
stripLeading():返回其值为该字符串的字符串, 删除所有前导空白。
stripTrailing():返回其值为该字符串的字符串, 删除所有尾随空白。
答案 10 :(得分:-1)
虽然@ xehpuk的方法很好,如果你想避免使用正则表达式,但它有O(n ^ 2)时间复杂度。以下解决方案也避免了正则表达式,但是O(n):
if(s.length() == 0)
return "";
char left = s.charAt(0);
char right = s.charAt(s.length() - 1);
int leftWhitespace = 0;
int rightWhitespace = 0;
boolean leftBeforeRight = leftWhitespace < s.length() - 1 - rightWhitespace;
while ((left == ' ' || right == ' ') && leftBeforeRight) {
if(left == ' ') {
leftWhitespace++;
left = s.charAt(leftWhitespace);
}
if(right == ' ') {
rightWhitespace++;
right = s.charAt(s.length() - 1 - rightWhitespace);
}
leftBeforeRight = leftWhitespace < s.length() - 1 - rightWhitespace;
}
String result = s.substring(leftWhitespace, s.length() - rightWhitespace);
return result.equals(" ") ? "" : result;
这将计算字符串开头和结尾的尾随空格数,直到&#34; left&#34;和&#34;对&#34;从空白计数获得的索引满足,或者两个索引都达到了非空白字符。之后,我们要么返回使用空白计数获得的子字符串,要么返回空字符串,如果结果是空格(需要考虑具有奇数个字符的所有空白字符串)。