Java String trim has no effect

隐身守侯 提交于 2019-11-28 02:35:11

问题


Java String trim is not removing a whitespace character for me.

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

The output is (1 ). Notice the space to the right of the 1.

I have to remove the trailing space from the string rank but neither rank.trim() nor rank.replace(" ","") removes it.

The string rank just remains the same either way.

Edit: Full Code::

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+")");
}

Why can't I remove that space?


回答1:


The source code of that website shows the special html character  . Try searching or replacing the following in your java String: \u00A0.

That's a non-breakable space. See: I have a string with "\u00a0", and I need to replace it with "" str_replace fails

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

should work. Maybe add a double \\ instead of the \.




回答2:


You should assign the result of trim back to the String variable. Otherwise it is not going to work, because strings in Java are immutable.

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



回答3:


Are you assigning the String?

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

Don't forget the second assignment, or your trimmed string will go nowhere.

You can look this sort of stuff up in the API as well: http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#trim()

As you can see this method returns a String, like most methods that operate on a String do. They return the modified String and leave the original String in tact.




回答4:


The character is a non-breaking space, and is thus not removed by the trim() method. Iterate through the characters and print the int value of each one, to know which character you must replace by an empty string to get what you want.




回答5:


I had same problem and did little manipulation on java's trim() method.
You can use this code to 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;
    }



回答6:


Trim function returns a new copy of the string, with leading and trailing whitespace omitted.

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

will give the result you want.

Replace method will not work if you pass empty string for replacement.




回答7:


Since String in java are immutable ie they cannot be changed. You need to reassign it to some temporary string. And then using that string you can convert it into int.

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


来源:https://stackoverflow.com/questions/11700598/java-string-trim-has-no-effect

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!