2016-06-30 71 views
-3

我有follwoing 3線輸入文件inputfile.txt:Java的:在一個文件中替換多個字符串,並將其寫入到輸出文件

REPLACE_STRING_1 is karthik 
REPLACE_STRING_2 is 21 
REPLACE_STRING_3 is chennai 

我需要使用不同的值來代替replace_strings和寫入內容添加到新文件。但是用下面的代碼,我最終在新文件中有3組相同的行。我怎樣才能解決這個問題?我想最終的輸出看起來像這樣:

name is karthik 
age is 21 
city is chennai 

這裏是我的代碼:

try { 
    File file = new File("inputfile.txt"); 
    BufferedReader reader = new BufferedReader(new FileReader(file)); 
    String line = "", oldtext = ""; 
    while ((line = reader.readLine()) != null) { 
     oldtext += line + "\r\n"; 
    } 
    reader.close(); 

    String ReplaceVar1 = oldtext.replaceAll("REPLACE_STRING_1", "name");     
    String ReplaceVar2 = oldtext.replaceAll("REPLACE_STRING_2", "age"); 
    String ReplaceVar3 = oldtext.replaceAll("REPLACE_STRING_3", "city"); 

    // Write updated record to a file 
    FileWriter writer = new FileWriter("outputfile.txt"); 
    writer.write(ReplaceVar1 + ReplaceVar2 + ReplaceVar3);     
    writer.close();     
} catch (IOException ioe) { 
    ioe.printStackTrace(); 
} 

我明白任何幫助。

+0

'字符串ReplaceVar1 = oldtext.replaceAll( 「REPLACE_STRING_1」, 「名」);字符串ReplaceVar2 = oldtext.replaceAll(「REPLACE_STRING_2」,「age」); String ReplaceVar3 = oldtext.replaceAll(「REPLACE_STRING_3」,「city」);' – sidgate

+0

您應該使用[try-with-resources](https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html )。 – Elazar

+0

作爲一個經驗法則,如果你寫一行描述以下幾行的行註釋,你應該爲這個描述找到一個好的標題,並把整個事情放在一個新的方法中。 – Elazar

回答

2

您應該更改新文本並只打印最後一個結果。

String result = oldtext.replaceAll("REPLACE_STRING_1", "name") 
         .replaceAll("REPLACE_STRING_2", "age") 
         .replaceAll("REPLACE_STRING_3", "city"); 

注意String是不可改變的,replaceAll返回整個文本,與期望的變化。

+0

謝謝。我編輯了代碼......正如你所說的那樣,當我嘗試在這個論壇上發佈一個通用代碼,刪除這裏不需要的部分時,這是一個錯字。我不知道爲什麼我會得到反對票。 – Karthik

+0

@Karthik我也改變了答案。 – Elazar

+0

但它也是工作 – Benjamin

0
try { 
    File file = new File("inputfile.txt"); 
    BufferedReader reader = new BufferedReader(new FileReader(file)); 
    String line = "", oldtext = ""; 
    while ((line = reader.readLine()) != null) { 
     oldtext += line + "\r\n"; 
    } 
    reader.close(); 


    System.out.println("Running ReplaceText"); 
    // replace a word in a file 
    // REPLACE_STRING_1TENANT_ID REPLACE_STRING_1SOURCE_IP REPLACE_STRING_1USER_NAME REPLACE_STRING_1TARGET_HOSTNAME REPLACE_STRING_1MBODY_TIME 
    String newText = oldtext.replaceAll("REPLACE_STRING_1", "name");     
    newText = newText.replaceAll("REPLACE_STRING_2", "age"); 
    newText = newText.replaceAll("REPLACE_STRING_3", "city"); 

    // Write updated record to a file 
    FileWriter writer = new FileWriter("outputfile.txt"); 
    writer.write(newText);     
    writer.close();     
} catch (IOException ioe) { 
    ioe.printStackTrace(); 
} 

我測試了這一點,給了我正確的輸出

-MacBook-Pro-2:Desktop john$ cat outputfile.txt 
name is karthik 
age is 21 
city is chennai 
相關問題