2016-11-15 8 views
0

テキストファイル内の単語を検索し、すべての大文字を小文字の文字に置き換えようとしています。問題は、正規表現を使用して置換機能を使用すると、構文エラーが発生することです。私は別の戦術を試みたが、それは動作しません。任意のヒント?私は、私が呼び出す必要があるすべての置換メソッドを作成する必要があるかもしれないと思うが、実際には使用されていない。javaのテキストファイル内の単語を検索する

public static void main() throws FileNotFoundException { 

    ArrayList<String> inputContents = new ArrayList<>(); 

    Scanner inFile = 
    new Scanner(new FileReader("H:\\csc8001\\data.txt")); 

    while(inFile.hasNextLine()) 
    { 
     String line = inFile.nextLine(); 
     inputContents.add(inFile.nextLine()); 

    } 
    inFile.close(); 

    ArrayList<String> dictionary = new ArrayList<>(); 


    for(int i= 0; i <inputContents.size(); i++) 
    { 
     String newLine = inFile.nextLine(); 
     newLine = newLine(i).replaceAll("[^A-Za-z0-9]"); 
     dictionary.add(inFile.nextLine()); 

    } 


    // PrintWriter outFile = 
    // new PrintWriter("H:\\csc8001\\results.txt"); 

} 
+0

コードを正しくフォーマットしてください。 –

+0

文字列のreplaceAllメソッドを見てください:https://www.tutorialspoint.com/java/java_string_replaceall.htm – RamanSB

答えて

3

このライン上でコンパイル・エラーがあります:正規表現と交換:replaceAllは、2つのパラメータを取ります

newLine = newLine(i).replaceAll("[^A-Za-z0-9]"); 

ので。 (。そしてnewLine(i)が非感があるため) これは、あなたが必要なものに近いようになります。です

newLine = newLine.replaceAll("[^A-Za-z0-9]+", " "); 

は、スペースで非[A-Za-z0-9]文字の非空のシーケンスを交換してください。

すべての大文字を小文字に変換するには、toLowerCaseを使用する方が簡単であり、より良い方法です。

あなたのコードには他にも多くの問題があります。たとえば、不適切なinFile.nextLineコールがあるため、入力内の一部の行がスキップされます。また、入力ファイルは最初のループの後に閉じられますが、2番目のループはそれを使用しようとしますが、意味がありません。

これらとクリーンアップいくつかの他の問題で

、これはあなたが望むものに近いようになります。

Scanner inFile = new Scanner(new FileReader("H:\\csc8001\\data.txt")); 

List<String> inputContents = new ArrayList<>(); 
while (inFile.hasNextLine()) { 
    inputContents.add(inFile.nextLine()); 
} 
inFile.close(); 

List<String> dictionary = new ArrayList<>(); 
for (String line : inputContents) { 
    dictionary.add(line.replaceAll("[^A-Za-z0-9]+", " ").toLowerCase()); 
} 

あなたの代わりにラインの辞書に単語を追加したい場合は、あなたはまた、行を分割する必要がありますスペースに。達成するための簡単な方法:

dictionary.addAll(Arrays.asList(line.replaceAll("[^A-Za-z0-9]+", " ").toLowerCase().split(" "))); 
+0

あなたの意見では、実行するためにメインメソッドでfunctionnalityを使用する別のメソッドを作成する方が良いでしょうAllAllかtoLowerCaseのどちらに置き換えようと、要求されたタスク? – Jazztheman

+0

私は単に 'replaceAll'を' toLowerCase'に置き換えて観光していました。私はそれが助ける場合、私の更新を参照してください多くの説明を追加しました – janos

+0

ありがとう、あなたの助けをありがとう。最後の質問が1つだけありますが、inputContentsリストからすべての単語を削除する方法はどうでしたか?感嘆符やその他のキャラクターが関与していないことを確認する方法は? – Jazztheman

関連する問題