2016-11-09 5 views
0

現在のところ、私のコードは、リターンで区切られている場合にのみ単語を編集します。スペースやコンマで単語を区切っても、置き換えられません。テキスト文書の特定の単語を編集するにはどうすればよいですか?

E.G.私が 'hey'を1行に、 'hi'を次の行に付けると。もし私が望むなら、私のコードは両方を置き換えることができます。しかし、もし私が 'hey'を1行に持ち、 'hi'を 'hey'の隣にカンマで区切っていれば、私のコードはどちらにも置き換えられません。

私のコードの目的は、.CSVファイル内の単語を置き換えることですが、コードがカンマまたはスペースで区切られた単語を置き換えることができない場合は機能しません。ここで

は、ボタンを押すだけでアクティブに私のコードです:

try{ 
    // Input the file location into Path variable 'p' 
    Path p = Paths.get("test test.txt"); 
    //Path p = Paths.get("tiger.csv"); 

    //Read the whole file to a ArrayList 
    List<String> fileContent = new ArrayList<>(Files.readAllLines(p)); 

    //Converting user input from editSerialField to a string 
    String strSerial = editSerialField.getText(); 
    //Converting user input from editLocationField to a string 
    String strLocation = editLocationField.getText(); 

    //This structure looks for a duplicate in the text file, if so, replaces it with the user input from editLocationField. 
    for (int i = 0; i < fileContent.size(); i++) 
    { 
     if (fileContent.get(i).equals(strSerial)) 
     { 
      fileContent.set(i, strLocation); 
      break; 
     } 

    } 

    // write the new String with the replaced line OVER the same file 
    Files.write(p, fileContent); 

    }catch(IOException e) 
    { 
     e.printStackTrace(); 
    } 

どのように私は、コンマまたはスペースで区切られた単語を編集することができますか?また、大文字か小文字かにかかわらず、単語を置き換えることができればうまくいくでしょう。これをどうやって実行しますか?

ありがとうございます。

次のを持っているあなたのコードで
+0

あなたは個々の単語を置き換えようとしているのに対し、/行全体/既知の文字列とのみ一致しているようです。あなたはラインを見て、個々の言葉を置き換えるために言葉を選ぶ必要があります。 'Scanner'クラスまたはCSVパーサーを使用することを検討してください。 – BadZen

+0

' Scanner'を使用しているとき、 'path'に変換することはできません。 'List 'は' Scanner s = new Scanner( "test test.txt"); 'であるのに対して、リスト fileContent =新しいArrayList <>(Files.readAllLines(s));私はファイル全体を読むためにScannerを別のやり方で使用するつもりですか? – juiceb0xk

+0

スキャナ機能は 'Files.readAllLines()'の代わりに使用され、 'スキャナ 'は読み取りを行います。 – BadZen

答えて

0

//Read the whole file to a ArrayList 
List<String> fileContent = Files.readAllLines(p); 

次に、各ラインをループするときだけチェックして、それぞれの場合を参照してください。私は本当にこのことを意味推測している

//Read the whole file to a ArrayList 
List<String> fileContent = new ArrayList<>(Files.readAllLines(p)); 

あなたの興味のあるものが含まれています。また、あなたの行のそれぞれを単語に分割してから、すべての単語をすべてJava 8ストリームでチェックすることもできます。

+0

いいえ、彼は絶対にできません。これは、単語内の/部分文字列/単語全体を置換するでしょう。 – BadZen

+0

が正しい。彼は各行を単語に分割し、必要に応じて更新する必要があります。 – LanceP

1

は、正規表現をエンゲージ:

fileContent.replaceAll(s -> s.replaceAll("(?i)\\b" + strSerial + "\\b", strLocation)); 

は、検索語の両端に置き換えられますのみ単語全体を意味し、「単語の境界」を意味し、\bを追加します。

(?i)を追加することは、「大文字小文字を区別する」を意味します。

関連する問題