0

Scannerを使用して、単語の境界で String を分割したいと考えています。通常、これは次のように行われます。

Scanner scanner = new Scanner(...).useDelimiter("\\b");

問題は、「単語」文字の私の定義が標準とは少し異なることです。これは、さらに文字を含めて:[a-zA-Z_0-9]を除外したいためです。したがって、パターンを使用することはできません。_[a-zA-Z0-9#/]\b

だから私は先読みと後読みを使って同じことをしようとしましたが、私が思いついたものはうまくいきませんでした:

(<?=[A-Za-z0-9#/])(?![A-Za-z0-9#/])|(<?![A-Za-z0-9#/])(?=[A-Za-z0-9#/])

これを使用すると、スキャナーはどこにも分割されません。

先読みと後読みを使用してこれを行うことは可能ですか?

4

3 に答える 3

3

構文にエラーがあります。最初?に来る:

(?<=[A-Za-z0-9#/])(?![A-Za-z0-9#/])|(?<![A-Za-z0-9#/])(?=[A-Za-z0-9#/])
 ^^                                  ^^
于 2012-10-22T14:11:56.277 に答える
1
new Scanner(...).useDelimiter(
  "(?<=[a-zA-Z0-9#/])(?=[^a-zA-Z0-9#/])|(?<=[^a-zA-Z0-9#/])(?=[a-zA-Z0-9#/])");
于 2012-10-22T14:17:13.687 に答える
0

何が問題になっていますか:

[^A-Za-z0-9#/]+

言い換えれば、あなたの単語セットではないセット内の少なくとも1つの文字の実行

またはスペースが必要な場合

[^A-Za-z0-9#/ ]+

次に、スキャナーの後で特別な処理を行うためにスペースを取り除きます(必要な場合)

于 2012-10-22T14:10:50.590 に答える