Java字符串修剪没有效果
Posted
技术标签:
【中文标题】Java字符串修剪没有效果【英文标题】:Java String trim has no effect 【发布时间】:2012-07-26 21:17:38 【问题描述】: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+")");
为什么我不能删除那个空间?
【问题讨论】:
您使用rank = rank.trim();
还是只使用rank.trim();
?第二个不行。
提供你用过的 trim() 代码..
@TerryLi 也许你应该告诉我们(some method)
的作用。
@Baz (some method)
只是试图从这个网站提取每所大学的排名:4icu.org/ca
请展示一个简短但完整的程序来说明问题。您目前没有提供足够的信息。
【参考方案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;
【讨论】:
【参考方案2】:该字符是一个不间断的空格,因此不会被trim()
方法删除。遍历字符并打印每个字符的 int 值,以了解必须将哪个字符替换为空字符串才能获得所需的内容。
【讨论】:
【参考方案3】:该网站的源代码显示了特殊的 html 字符 &nbsp;
。尝试在您的 java 字符串中搜索或替换以下内容:\u00A0
。
这是一个牢不可破的空间。见:I have a string with "\u00a0", and I need to replace it with "" str_replace fails
rank = rank.replaceAll("\u00A0", "");
应该可以。也许添加一个双 \\
而不是 \
。
【讨论】:
@TerryLi 看,如果您提供足够的信息,我们可以为您提供帮助。很高兴我能帮忙:) 这个答案值得注意:***.com/questions/1437933/…【参考方案4】:由于Java 中的String 是不可变的,即它们无法更改。您需要将其重新分配给一些临时字符串。然后使用该字符串,您可以将其转换为 int。
String temp=rank.trim()
int te= Integer.parseInt(temp)
【讨论】:
【参考方案5】:Trim 函数返回字符串的一个新副本,省略了前导和尾随空格。
rank = rank.trim();// This will remove and save rank without leading and trailing spaces
会给出你想要的结果。
如果传递空字符串进行替换,替换方法将不起作用。
【讨论】:
如果您不确定空格,我建议您使用正则表达式来提取数字。使用 "((-|\\+)?[0-9]+(\\.[0-9]+)?)+" 正则表达式将提取数字形式的字符串。 我会接受你的建议。但我还是想知道这两个空格代表什么。 @TerryLi 除非你给我们更多信息(比如一个小的工作程序),否则我们永远不会知道......【参考方案6】:您应该将修剪的结果分配回String
变量。否则它将无法工作,因为 Java 中的字符串是不可变的。
String orig = " quick brown fox ";
String trimmed = original.trim();
【讨论】:
【参考方案7】:你在分配字符串吗?
String rank = " blabla ";
rank = rank.trim();
不要忘记第二个作业,否则你修剪的字符串将无处可去。
您也可以在 API 中查看此类内容:http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#trim()
正如你所看到的,这个方法返回一个字符串,就像大多数操作字符串的方法一样。他们返回修改后的字符串并保留原始字符串。
【讨论】:
以上是关于Java字符串修剪没有效果的主要内容,如果未能解决你的问题,请参考以下文章
java.sql.ResultSet 在增加列长度后返回修剪后的字符串