2012-07-28 94 views
14

Java String trim没有为我删除空白字符。Java String trim没有效果

String rank = (some method); 
System.out.println("(" + rank + ")"); 

输出是(1 )。请注意右侧的空格1.

我必须从字符串rank中删除尾部空格,但rank.trim()rank.replace(" ","")都不会将其删除。

字符串rank只是保持不变。

编辑:全码:

Document doc = Jsoup.connect("http://www.4icu.org/ca/").timeout(1000000).get(); 
Element table = doc.select("table").get(7); 
Elements rows = table.select("tr"); 
for (Element row: rows) { 
    String rank = row.select("span").first().text().trim(); 
    System.out.println("("+rank+")"); 
} 

为什么我不能删除的空间?

+3

你使用'等级= rank.trim();'或'只是rank.trim();'?第二个将不起作用。 – Baz 2012-07-28 11:28:07

+0

提供你已经使用过的trim()代码。 – 2012-07-28 11:41:06

+0

@Baz问题编辑 – 2012-07-28 11:41:50

回答

36

该网站的源代码显示特殊的html字符 。尝试搜索或替换您的Java字符串中的以下内容:\u00A0

这是一个不可破坏的空间。参见:I have a string with "\u00a0", and I need to replace it with "" str_replace fails

rank = rank.replaceAll("\u00A0", ""); 

应该工作。也许增加一个双重\\而不是\

+3

@TerryLi看到,如果你提供了足够的信息,我们能够帮助你。很高兴我可以帮助:) – Baz 2012-07-28 12:33:46

+0

@巴兹谢谢,它的作品! – dogankadriye 2014-09-04 10:48:00

+0

值得注意这样的回答:http://stackoverflow.com/questions/1437933/how-to-properly-trim-whitespaces-from-a-string-in-java – Quaternion 2015-02-23 09:43:20

3

你在分配字符串吗?

String rank = " blabla "; 
rank = rank.trim(); 

不要忘记第二个任务,否则你的修剪过的字符串将无处可去。

你可以看看这种东西了API,以及在:http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#trim()

正如你可以看到这个方法返回一个字符串,这样在字符串操作做大部分的方法。他们返回修改过的String并保留原始String。

+0

问题编辑 – 2012-07-28 11:42:06

7

您应该将trim的结果返回给String变量。否则它不会工作,因为Java中的字符串是不可变的

String orig = " quick brown fox "; 
String trimmed = original.trim(); 
+0

问题编辑 – 2012-07-28 11:41:57

0

修剪函数返回字符串的新副本,省略前导和尾随空白。

rank = rank.trim();// This will remove and save rank without leading and trailing spaces 

会给你想要的结果。

如果您传递空字符串进行替换,替换方法将不起作用。

+0

问题编辑 – 2012-07-28 11:42:26

+1

如果你不能确定的空间,我会建议你使用正则表达式来提取的数目。使用“(( - | \\ +)?[0-9] +(\\。[0-9] +)?)+”正则表达式将提取数字表单字符串。 – 2012-07-28 11:49:56

+0

我会带你咨询。但我仍然想知道这两个空间是什么意思。 – 2012-07-28 12:00:29

0

由于在Java中的字符串是不可变的,即他们不能改变。您需要将其重新分配给一些临时字符串。然后使用该字符串可以将其转换为int。

String temp=rank.trim() 
int te= Integer.parseInt(temp) 
+0

您不必使用临时字符串。你可以使用'rank = rank.trim();'... – Baz 2012-07-28 11:37:33

+0

编辑问题 – 2012-07-28 11:42:18

3

该字符是非破坏性空间,因此不会被trim()方法删除。遍历字符并打印每个字符的int值,知道必须用空字符串替换哪个字符以获得所需内容。

1

我有同样的问题,并没有对java的trim()方法进行很少的操作。
您可以使用此代码来修剪:

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; 
    }