2009-09-17 110 views

回答

55

谷歌已經guava-libraries提供最近。它may have你在找什麼:

CharMatcher.inRange('\0', ' ').trimFrom(str) 

相當於String.trim(),但你可以自定義修剪,指的JavaDoc。

CharMatcher.WHITESPACE.trimFrom(str) 
+2

Upvoted讓我覺得自己是個混蛋 – itsadok 2009-09-17 11:18:36

+0

感謝指針番石榴。我錯過了。 – CPerkins 2009-09-17 12:02:32

+1

提示:['trimAndCollapseFrom'](http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/base/CharMatcher.html#trimAndCollapseFrom(java.lang.CharSequence,%20char) )修剪字符串的外部,同時也替換字符串內的重複值。 – 2015-03-07 05:59:57

2

我總是發現trim幾乎適用於各種情況。

但是,如果你真的想有更多的字符,你可以從commons-lang編輯strip方法不僅包括Character.isWhitespace的考驗,同時也爲Character.isSpaceChar似乎是缺少了什麼。即,分別爲stripStartstripEnd,下面幾行:

  • while ((start != strLen) && Character.isWhitespace(str.charAt(start)))
  • while ((end != 0) && Character.isWhitespace(str.charAt(end - 1)))
7

我發誓,我只看到這個後我貼:

例如,它具有its own definition of WHITESPACE從JDK不同,根據最新的Unicode標準定義的,所以你需要什麼可以書面問題是:Google剛剛發佈了Guava,這是一個核心Java實用程序庫。

我沒有試過呢,但我可以告訴,這是完全支持Unicode標準:

String s = " \t testing \u00a0" 
s = CharMatcher.WHITESPACE.trimFrom(s); 
+2

哈哈,我剛剛提前5分鐘提供了相同的答案,但隨後將其編輯爲包含您需要使用的確切代碼,然後纔看到您自己發現的評論。 – CrazyCoder 2009-09-17 11:20:03

2

這真的很難界定什麼是空格。有時我會使用不可破壞的空間來確保它不會被剝離。所以很難找到一個圖書館去做你想要的東西。

我使用我自己的trim(),如果我想修剪每個空白空間。下面是我用它來檢查空格功能,

public static boolean isWhitespace (int ch) 
    { 
    if (ch == ' ' || (ch >= 0x9 && ch <= 0xD)) 
     return true; 
    if (ch < 0x85) // short-circuit optimization. 
     return false; 
    if (ch == 0x85 || ch == 0xA0 || ch == 0x1680 || ch == 0x180E) 
     return true; 
    if (ch < 0x2000 || ch > 0x3000) 
     return false; 
    return ch <= 0x200A || ch == 0x2028 || ch == 0x2029 
     || ch == 0x202F || ch == 0x205F || ch == 0x3000; 
    } 
+9

請指出這些魔術常數.. – 2009-09-17 15:40:45

+6

ZZ編碼器 - 你說,「這將是很難找到一個圖書館做你想要的。」不對! 假設您想要匹配所有空格_except_ a \ u00a0(非中斷空格)。 Easy: CharMatcher.WHITESPACE.and(CharMatcher.isNot('\ u00a0'))。trimFrom(input) – 2009-11-04 01:59:26

+2

@KevinBourrillion只是想發送一個很大的「感謝」給CharMatcher.WHITESPACE。 'String#trim()'在Unicode中很難實現。 – 2013-03-21 22:38:58

0

我做了Java的裝飾()方法變化不大,它支持非ASCII characters.This方法的運行速度比大多數實現更快。

public static String trimAdvanced(String value) { 

     Objects.requireNonNull(value); 

     int strLength = value.length(); 
     int len = value.length(); 
     int st = 0; 
     char[] val = value.toCharArray(); 

     if (strLength == 0) { 
      return ""; 
     } 

     while ((st < len) && (val[st] <= ' ') || (val[st] == '\u00A0')) { 
      st++; 
      if (st == strLength) { 
       break; 
      } 
     } 
     while ((st < len) && (val[len - 1] <= ' ') || (val[len - 1] == '\u00A0')) { 
      len--; 
      if (len == 0) { 
       break; 
      } 
     } 


     return (st > len) ? "" : ((st > 0) || (len < strLength)) ? value.substring(st, len) : value; 
    } 
相關問題