6

Java文字列を単語の配列に分割する必要があります。文字列が次のようになっているとしましょう:

"Hi!! I need to split this string, into a serie's of words?!"

現時点ではこれを使用してみましたString[] strs = str.split("(?!\\w)")が、!などの記号が保持されています。配列内にあり、「Hi!」のような文字列も保持します アレイ内にも。分割する文字列は常に小文字になります。私が望むのは、次のような配列を作成することです {"hi", "i", "need", "to", "split", "this", "string", "into", "a", "serie's", "of", "words"}。-アポストロフィが保持されていることに注意してください。

配列にシンボルが含まれないように正規表現を変更するにはどうすればよいですか?

申し訳ありませんが、単語を英数字のシーケンスとしてのみ定義しますが、「it's」などの単語を引用するために使用される場合ではなく、「it's」などの上記のコンテキストにある場合は'文字を含みます。また、この文脈では、「hi」または「hi-person」は単語ではなく、「hi」および「person」は単語です。それが問題を明確にすることを願っています。

4

7 に答える 7

10

すべての記号を削除し?!てから単語に分割できます

str = str.replaceAll("[!?,]", "");
String[] words = str.split("\\s+");

結果:

Hi, I, need, to, split, this, string, into, a, serie's, of, words

于 2013-01-26T17:40:49.817 に答える
4

あなたが望むもののために働くはずです。

String line = "Hi!! I need to split this string, into a serie's of words?! but not '' or ''' word";
String regex = "([^a-zA-Z']+)'*\\1*";
String[] split = line.split(regex);
System.out.println(Arrays.asList(split));

与える

[Hi, I, need, to, split, this, string, into, a, serie's, of, words, but, not, or, word]
于 2013-01-26T18:45:13.660 に答える
2

単語を非空白文字のシーケンス(で定義された空白文字)として定義する\s場合、スペース文字に沿って分割できます。

str.split("\\s+")

、、、およびは上記の定義に基づく単語であること";.';.@#$>?>@4"に注意してください。"very,bad,punctuation""'goodbye'"

次に、もう1つのアプローチは、許可された文字のセットからの文字のシーケンスとして単語を定義することです。a-z、、A-Zを単語の一部として許可したい場合は'、他のすべてに沿って分割できます。

str.split("[^a-zA-Z']+")

ただし、これでも"''''''"単語として定義できます。

于 2013-01-26T17:27:38.347 に答える
1

したがって、必要なのは、単語文字[a-zA-Z]ではなく、'ではないものを分割することです。この正規表現は、「[^ a-zA-Z'] \s」を実行します。文字列には、'で引用されている引用符が含まれています

私は通常、このページを正規表現のテストに使用します' http://www.regexplanet.com/advanced/java/index.html

于 2013-01-26T17:33:39.847 に答える
0

「単語以外の」文字と見なす文字を除外できます。

String[] strs = str.split("[,!? ]+");
于 2013-01-26T17:30:48.220 に答える
0

私は使用しますstr.split("[\\s,?!]+")。角かっこ内で分割したい文字を追加できます[]

于 2013-01-26T17:33:06.270 に答える
0
myString.replaceAll("[^a-zA-Z'\\s]","").toLowerCase().split("\\s+");

replaceAll("[^a-zA-Z'\\s]","")a-zメソッドは、またはA-Zまたは'またはaではないすべての文字をwhitespace何も("")に置き換えてから、メソッドはメソッドtoLowerCaseから返されるすべての文字をreplaceAll小文字にします。最後にsplit、空白文字の観点から文字列を入力します。より読みやすいもの;

myString = myString.replaceAll("[^a-zA-Z'\\s]","");
myString = myString.toLowerCase();
String[] strArr = myString.split("\\s+");
于 2013-01-26T17:36:18.950 に答える