1

この単純な文字列を 2 つの変数に解析しようとすると、float当初考えていたよりも簡単ではないことがわかりました。

-0.13 0.17%

(唯一の?) 理由は、2 つの数字の間のスペースが実際には . したがって、最初は文字列全体をscanner.next()返します。

Scanner scanner = new Scanner("-0.13 0.17%");
String first = scanner.next(); 

Scanner のuseDelimiter() メソッドは知っていますが、区切り文字として使用するように指示するにはどうすればよいですか?

試してみuseDelimiter(" ")ましたが、うまくいきませんでした

私は何を間違っていますか?

4

3 に答える 3

2

アンパサンド エスケープ シーケンスは、HTML と XML でのみ機能し、Java では機能しません。代わりに を使用してみてください"\u00a0"

于 2013-04-15T00:12:36.543 に答える
2

Ascii of 160 は nbsp であるため、その値を持つ char を文字列と連結すると、機能するはずです。

char nbsp = 160;
useDelimiter("" + nbsp);
于 2013-04-15T00:13:15.847 に答える
2

Scannerクラスのデフォルトの区切り文字は\p{javaWhitespace}+. \p{javaWhitespace}はメソッドによって定義され、定義によりCharacter.isWhitespace改行しないスペースを除外します。

Javaに従って、指定された文字が空白かどうかを判断します。次の基準のいずれかを満たす場合に限り、その文字は Java 空白文字です。

  • これは Unicode スペース文字 ( SPACE_SEPARATORLINE_SEPARATOR、またはPARAGRAPH_SEPARATOR) ですが、非改行スペース ( '\u00A0''\u2007''\u202F') ではありません。
  • [...]

No-Break Space とデフォルト'\u00A0'の Java 空白を含める場合は、それらを組み合わせた正規表現を作成する必要があります。

scanner.useDelimiter("[\\p{javaWhitespace}\u00A0]+");

+後ろが重要なので注意。これにより、パターン全体が連続する一連の空白と一致します。これがないと、next()連続する空白がある場合に空の文字列が返されます。

于 2013-04-15T00:40:45.250 に答える