3

テキスト ファイル内の一意の単語を検索するために、このプログラムを Java で作成しています。スペースも単語として表示されるため、このコードが正しいかどうかを知りたいです。

String[] words;
List<String> uniqueWords = new ArrayList<String>();
words = str1.split("[!-~]* ");
for (int i = 0; i < words.length; i++)
{
    if (!(uniqueWords.contains (words[i])))
    {
        uniqueWords.add(words[i]);
    }
}

たとえば、私の入力が「Hello world! How is the world?」であるとします。私の出力配列/セット/リストには、hello、world、how、is、the

4

6 に答える 6

5

Setを使用して、一意の単語を見つけることができます。Set は、重複する要素を含まないコレクションです。

String[] words;
Set<String> uniqueWords = new HashSet<String>();
words = str1.split("[\\W]+");
for (int i = 0; i < words.length; i++)
{
    uniqueWords.add(words[i]);
}
于 2013-03-20T11:32:26.277 に答える
4

他の回答のわずかに変更されたバージョン(短くてシンプルなのが好きです):

String[] words = str1.split("[!-~]* ");
Set<String> uniqueWords = new HashSet<String>();

for (String word : words) {
    uniqueWords.add(word);
}

注:!または-または~または スペースで分割する場合は、これを使用する必要があります。

String[] words = str1.split("[-!~\\s]+");

(ダッシュは最初または最後でなければなりません)

于 2013-03-20T11:40:28.850 に答える
2

本当にコンパクトにするなら:

Set<String> unique = new HashSet<String>(Arrays.asList(str.toLowerCase().split("[-.,:;?!~\\s]+")));
于 2013-03-20T11:50:06.677 に答える
1

Set は重複を許可しませんが、List は重複を許可します。

String[] words;
Set<String> uniqueWords = new HashSet<String>();
words = str1.split("[!-~]* ");
for (int i = 0; i < words.length; i++)
    uniqueWords.add(words[i]); //Here you need not to check with set because it wont allow duplicates
于 2013-03-20T11:33:54.823 に答える
0

パターンとマッチャーを使用し、結果をセットにドロップすることをお勧めします。

public void getWords()
{
    Set<String> words = new HashSet<String>();
    String pattern = "[a-zA-Z]+\\s";
    String match = "hello world how* are. you! world hello";
    Pattern compile = Pattern.compile(pattern);
    Matcher matcher = compile.matcher(match);
    while(matcher.find())
    {
        String group = matcher.group();
        boolean add = words.add(group);
        if(add)
        {
            System.out.println(group);
        }
    }
}

出力:

hello 
world 

パターンを変更して、「単語」の定義を変更します。

于 2013-03-20T11:40:57.063 に答える