0

区切り文字とパターンの使用に関する多くの質問と回答を読んでいますが、これを理解するのにまだ多くの問題があります。したがって、このような入力で

"the.dog,jumped over the hole@bob's house"

これは私に次の言葉を与えるでしょう

[the, dog, jumped, over, the, hole, bob's, house]

次に、各単語で何かを行います。

Scanner s1 = new Scanner(fileName);
while(s1.hasNext()){
temp = s1.next(String pattern = "no clue");
    //do something with temp
}

それを行うにはパターンが最適な方法だと思いますが、文字で始まり、これらの文字のいずれかに達すると終了する限り、バリエーション文字を含むパターンをどのように作成しますか? . , * % " ( ) & $ ? < > ! - : ; @ #または任意のタイプのwhite space.

私は非常にひどい実行時間効率で非常に醜い方法でそれを行うことができることを知っています. どんな助けでも大歓迎です、または私が見つけていない助けになるかもしれない別の質問への指示。

4

4 に答える 4

1

次のようなものが機能するはずです。

Scanner s1 = new Scanner(fileName).useDelimiter("[^\\p{L}']+");
while(s1.hasNext()) {
    String temp = s1.next();
    System.out.println(temp);
}
于 2013-02-05T04:51:17.517 に答える
0

複雑にしないでおく:

String[] a = "the.dog,jumped over. the hole@bob's house.in land".split("\\s|\\.|,|@");
for(int i=0; i< a.length;i++){
 String temp = a[i];
  //do something with temp
}

split() は正規表現を受け入れます...それを使用してください...

于 2013-02-06T10:01:57.943 に答える
0

必要なのは、 function ですべての区切り記号を指定することだけだと思います。指定しscanner.useDelimiterたとおりにテスト文を分割する例を次に示します (. , @ space区切り記号として使用)。パターン式には、必要に応じてさらに区切り文字を追加できます。

Scanner scanner = new Scanner("the.dog,jumped over the hole@bob's house");
scanner.useDelimiter("\\.|\\,|\\@|\\s");

while (scanner.hasNext()) {
    String temp = scanner.next();
    System.out.println(temp);
}

"the....dog,,,jumped" などの繰り返しの区切り文字を無視する場合は、区切り文字の後にscanner.useDelimiter("\\.+|\\,+|\\@+|\\s+");のみ追加する次のパターンを delimiter として使用できます。+

于 2013-02-05T04:50:13.780 に答える
0

スキャナーに区切り文字を設定することができ、それでうまくいくはずです。

Scanner s = new Scanner("the.dog,jumped over. the hole@bob's house.in land");
String pattern = "\\s|\\.|,|@" ;
s.useDelimiter(pattern);
while(s.hasNext()){
  String temp = s.next();
  //do something with temp
}

すべての区切り文字をパターン文字列に追加できます。.(ドット) のような正規表現で特別な意味を持つ文字を (\\ を使用して) エスケープする必要があります。そのような文字の詳細リストについては、このリンクを参照してください。

于 2013-02-05T05:04:31.753 に答える