21

Java String のトリムで空白文字が削除されません。

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

そのスペースを削除できないのはなぜですか?

4

7 に答える 7

61

その Web サイトのソース コードは、特殊な html 文字を示しています 。Java 文字列で次を検索または置換してみてください: \u00A0

それは壊れない空間です。参照: "\u00a0" を含む文字列があり、それを "" に置き換える必要がある str_replace が失敗する

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

動作するはずです。\\の代わりにdouble を追加することもでき\ます。

于 2012-07-28T12:22:28.927 に答える
9

トリムの結果をString変数に代入する必要があります。Java の文字列はimmutableであるため、それ以外の場合は機能しません。

String orig = "    quick brown fox    ";
String trimmed = original.trim();
于 2012-07-28T11:29:24.370 に答える
4

文字は非改行スペースであるため、trim()メソッドによって削除されません。文字を反復処理し、それぞれの int 値を出力して、必要なものを取得するために空の文字列に置き換える必要がある文字を確認します。

于 2012-07-28T12:23:05.753 に答える
3

私は同じ問題を抱えていて、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;
    }
于 2015-07-25T08:34:06.387 に答える
3

文字列を割り当てていますか?

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

2 番目の割り当てを忘れないでください。そうしないと、トリミングされた文字列がどこにも行きません。

APIでもこの種のものを調べることができます:http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#trim ()

ご覧のとおり、このメソッドは文字列を返します。これは、文字列を操作するほとんどのメソッドと同様です。変更された文字列を返し、元の文字列はそのままにします。

于 2012-07-28T11:29:19.277 に答える
0

Trim 関数は、先頭と末尾の空白を省略して、文字列の新しいコピーを返します。

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

あなたが望む結果が得られます。

置換用に空の文字列を渡すと、Replace メソッドは機能しません。

于 2012-07-28T11:35:41.677 に答える
0

Java の String は不変であるため、変更することはできません。一時的な文字列に再割り当てする必要があります。そして、その文字列を使用して int に変換できます。

String temp=rank.trim()
int te= Integer.parseInt(temp)
于 2012-07-28T11:36:19.560 に答える