1

ファイルを読み取り(つまり.txt)、ファイルを配列に保存するプログラムを実装したいと思います(これを実行しました)。次に、すべての行の単語のみを保存する2次元配列が必要です。

たとえば、ファイルに2行が含まれ、すべての行に2つの単語が含まれている場合、array[0][0]最初の行の最初の単語と最初の行array[0][1]の2番目の単語を含めます。

私は次のコードを持っています:

for (int i=0; i < aryLines.length; i++) {
    String[] channels = aryLines[i].split(" ");

    System.out.println("line " + (i+1) + ": ");

    for (int j=0; j < channels.length; j++){
        System.out.println("word " + (j+1) + ": ");
        System.out.println(channels[j]);
    }

    System.out.println();
}

ここで、aryLinesすべての行が含まれていますが、説明したことを実行するソリューションが見つかりませんでした。

4

1 に答える 1

1

配列を次のようにします1-D。 -

String[] lines = new String[10];

最初に配列の配列を宣言する必要があります: -

String[][] words = new String[lines.length][];

次に、それを繰り返し処理し、行ごとに分割して内部配列に割り当てます。

for (int i = 0; i < words.length; i++) {
    words[i] = lines[i].split("\\s+");
}

ここで問題になるのは、すべての単語が だけで区切られているわけではないということspaceです。また、考慮する必要がある多くの句読点があります。すべての句読点で分割するのはあなたに任せます.

例: -

"This line: - has word separated by, : and -"

ここで、文で使用されているすべての句読点を見つける必要があります。


できることの 1 つは、 a を使用して単語のみのパターンに一致させることです。行ですべてが使用されているRegexかどうかわからない場合です。punctuationそして、一致した各単語を配列リストに追加します。

"\\w+"  // this regex will match one or more characters forming words

上記の例で動作することを見てみましょう: -

    String str = "This line: - has word separated by, : and -";
    List<String> words = new ArrayList<String>();

    Matcher matcher = Pattern.compile("\\w+").matcher(str);

    while (matcher.find()) {
        words.add(matcher.group());
    }

    System.out.println(words);

出力 : -

[This, line, has, word, separated, by, and]

私が投稿した上記のループでこのアプローチを使用できます。

于 2012-11-23T09:47:19.083 に答える