0

私は文字列を取ろうとしています:

String s = "This is a String!";

そして、その文字列内のすべての 2 単語のペアを返します。すなわち:

{"this is", "is a", "a String"}

しかし、今、私ができることは、返すことだけです:

{"this is", "a String"}

この重複する単語の欠如を説明できるように、while ループを定義するにはどうすればよいでしょうか? 私のコードは次のとおりです: (本当に、見つかった文字列サブセットの数を表す int を返すだけで満足です...)

int count = 0;
while(matcher.find()) {
    count += 1;
}

皆さんありがとう。

4

4 に答える 4

3

すでに投稿されている2つの回答、単語を数えて1を引くのが好きですが、重複する一致を見つけるために正規表現が必要なだけの場合:

Pattern pattern = Pattern.compile('\\S+ \\S+');
Matcher matcher = pattern.matcher(inputString);
int matchCount = 0;
boolean found = matcher.find();
while (found) {
  matchCount += 1;
  // search starting after the last match began
  found = matcher.find(matcher.start() + 1);
}

実際には、単純に 1 を足すよりも少し賢くする必要があります。「the force」でこれを試すと、「he force」と「e force」が一致するからです。もちろん、これは単語を数えるにはやり過ぎですが、正規表現がそれよりも複雑な場合に役立つ可能性があります。

于 2012-09-18T05:47:29.680 に答える
1

i = 0から単語数-2までのforループを実行すると、単語iとi+1が単一の2単語の文字列を構成します。

String[] splitString = string.split(" ");
for(int i = 0; i < splitString.length - 1; i++) {
    System.out.println(splitString[i] + " " + splitString[i+1]);
}

文中の2単語の文字列の数は、単に単語の数から1を引いた数です。

int numOfWords = string.split(" ").length - 1;
于 2012-09-18T05:38:12.837 に答える
0

ペアの総数=単語の総数-1

そして、あなたはすでに単語の総数を数える方法を知っています。

于 2012-09-18T05:38:56.843 に答える