2009-09-17 66 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; 
    } 
相关问题