1

各行が単一のレコードを表すデータファイルがあり、各レコードには、それぞれの前に「+」が付いたキーワードのリストが含まれている場合があります。

foo1 foofoo foo foo foo +key1 +key2 +key3
foo2 foo foo foofoo foo 
foo3 foo foofoo foo +key1 key1 key1 +key2

キーワードの数はゼロから理論的に無制限の間です。キーワードの前には常に+が付きます。個々のキーワードは、1つの単語、またはスペースを含むフレーズにすることができます。キーワードを特定するための私の戦略:

これらのレコードを配列に読み込みたいと思いString keywords[]ます。私はlineBufferデータを取り込むために使用しています、そしてこれが私がこれまでに持っているものです。

// PSEUDOCODE
counter = [number of occurences of + in the line];
for(int i=0;i<=counter,i++) {
    Pattern p = [regex reresenting + to the next occurence of + -or- end of line];
    Match pattern;
    keyword[i] = Match.group(1) }

私はこれを考えすぎているかもしれませんが、Javaは同じ行のパターンの次のインスタンスに移動することを知っていますか?これらの数行のコードを見ると、私のパターンマッチャーはその行を読み取り、キーワードの最初のインスタンスを見つけて、それを配列iに何度も書き込むようです。2番目のキーワードに到達することはありません。

これについて考えるより良い方法はありますか?このアレイを作成するためのより良い戦略は?

4

2 に答える 2

2

キーに何もないことがわかっている場合は+、文字列を単純に分割できます。

String[] ss = s.split(" \\+");

そして、最初のエントリ(foo fooo ...)を破棄します。

編集

パターン/正規表現の質問に関しては、次のようにすることもできます。

Pattern p = Pattern.compile(" \\+\\w+");
Matcher m = p.matcher(s);
while (m.find()) {
    String key = m.group().trim().replaceAll("\\+","");
    System.out.println(key);
}
于 2012-08-08T12:18:54.800 に答える
1

これはスキャナーで行うのはかなり簡単でしょう:

Scanner s = new Scanner(line);
int i = 0;
while (s.hasNext()) {
    String token = s.next();
    if (token.startsWith("+")) {
        keyword[i] = token;
        i++;
    }
}
于 2012-08-08T12:19:41.490 に答える