我想從字符串除去開頭和結尾的空白:如何從Java中的字符串中刪除前導和尾隨空白?
String s = " Hello World ";
我想要的結果是這樣的:
s == "Hello world";
我想從字符串除去開頭和結尾的空白:如何從Java中的字符串中刪除前導和尾隨空白?
String s = " Hello World ";
我想要的結果是這樣的:
s == "Hello world";
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+"!");
s = s.trim();
更多信息: http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#trim()
爲什麼你不希望使用預定義的方法?他們通常是最有效的。
使用String類修剪方法。它將刪除所有前導和尾隨空白。
http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/String.html
String s="Test ";
s= s.trim();
String s=" Hello World ";
s = s.trim();
因爲我不喜歡使用正則表達式的瑣碎問題的更多信息See This
。這將是一個簡單的選擇:
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();
}
雖然@ 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;
此計數在開始和結束字符串尾部空格的數量,直到從得到無論是「左」和「右」的索引空白計數符合,或者兩個索引都達到了非空白字符。之後,我們要麼返回使用空白計數獲得的子字符串,要麼返回空字符串(如果結果是空格)(需要考慮具有奇數字符的全空白字符串)。
儘管這段代碼片段是受歡迎的,並且可能會提供一些幫助,但它會[如果包含解釋](// meta.stackexchange.com/q/114762) *和*爲什麼*這解決了這個問題。請記住,你正在爲將來的讀者回答這個問題,而不僅僅是現在問的人!請編輯您的答案以添加解釋,並指出適用的限制和假設。 – 2017-04-05 12:13:55
@TobySpeight添加了解釋,希望它有用/足夠:)。 – 2017-04-05 12:50:32
輕微的微型優化,但是直到你找到一個非空白字符而不是總是數到中間,不是更好嗎? – DavidBittner 2017-05-30 13:23:30
我從來沒有想過如何做這種事情沒有預定義的方法。假設它是可能的,那麼你需要迭代字符串中的所有字符,但是你必須再次使用類String的charAt()方法。它是爲你預定的嗎? – ka3ak 2012-02-02 08:00:16
這是家庭作業的怪胎。 – Bombe 2012-02-02 08:18:41
@ ka3ak或使用模式。 – Nishant 2012-02-02 08:19:11