-1

先ほど質問しましたが、厳しい批判に出くわしたので、ここでもう一度提起します。よりシンプルで、私が以前に尋ねた方法について心配していたかもしれない人々にアピールするために言い換えられました。

背景私は情報のためにいくつかのHTMLを解析しています。私は一連の行ですべてを分離しましたが、取得したいコンテンツとその後のスペースの束。スペースを取り除くために、trim()を使用することを選択しましたが、問題が発生しています。私のコードの最後の数行はテストです:

System.out.println("'" + someString + "'\n'" + someString.trim() + "'");

結果は次のとおりです。

'Sophomore                                          '
'Sophomore                                          '

私たちは皆、時々間違いを犯すので、trim()の呼び出し方法に問題があるのではないかと心配していたので、次のようにテストしました。

String s = "   hello         ";
System.out.println("'" + s+ "'\n'" + s.trim() + "'");

結果は次のとおりです。

'  hello     '
'hello'

私の質問私は何が間違っているのですか?私が欲しいのは、「2年生」ではなく「2年生」を取得することです

よろしくお願いします(よろしくお願いします!)。

4

2 に答える 2

3

String.trim() 具体的には、コードがを超える最初の文字の前\u0020、およびそのような最後の文字の後の文字のみを削除します。

これは、考えられるすべての空白文字を削除するには不十分です。Unicodeは\u0020、によって一致しないいくつかの文字(上記のコードポイントを含む)を定義し.trim()ます。

おそらく、あなたの空白文字はあなたが思っているものではありませんか?

EDIT\u00a0コメントは、余分な文字が実際に「特別な」空白文字、特にUnicodeの「ノーブレークスペース」であることを明らかにしました。それらを通常のスペースに置き換えるには、次を使用します。

str = str.replace('\u00a0', ' ');
于 2012-09-09T23:27:23.707 に答える
1

ソース文字列には空白以外の文字が含まれている必要があります。以下をコードに追加して、何が出力されるかを確認してください。

for (char ch : someString.toCharArray()) {
     System.out.print(Integer.toHexString(ch) + " ");
}
于 2012-09-09T23:35:10.783 に答える