2014-11-25 69 views
0

我有這樣的:字符串替換不工作或Im啞巴?

for (String[] aZkratkyArray1 : zkratkyArray) { 
    String oldString = " " + aZkratkyArray1[0] + " "; 
    String firstString = aZkratkyArray1[0] + " "; 
    String newString = " " + aZkratkyArray1[1] + " "; 
    System.out.println(newString); 
    System.out.println(fileContentsSingle); 
    fileContentsSingle = fileContentsSingle.replaceAll(oldString, newString); 
    if (fileContentsSingle.startsWith(firstString)) { 
     fileContentsSingle = aZkratkyArray1[1] + " " + fileContentsSingle.substring(firstString.length(),fileContentsSingle.length()); 
    } 
} 

fileContentsSingle只是一些普通的字符串,aZkratkyArray是陣列縮短的話,FE:

  • HT,你好
  • WRU,你是誰

所以,當fileContentsSingle = ht我是機器人 它應該最終:你好,我是機器人

或當fileContentsSingle =我是機器人HRU 它應該結束了:我是機器人,你是誰

但當我這個迭代後SYSOUT fileContentsSingle,或它在,字符串從未改變。

我試過replace和replaceAll,我嘗試了所有我能想到的。

哪裏錯了嗎?

編輯: 這是我如何導入陣列:

 String[][] zkratkyArray; 
     try { 
      LineNumberReader lineNumberReader = new LineNumberReader(new FileReader("zkratky.csv")); 
      lineNumberReader.skip(Long.MAX_VALUE); 
      int lines = lineNumberReader.getLineNumber(); 
      lineNumberReader.close(); 

      FileReader fileReader = new FileReader("zkratky.csv"); 
      BufferedReader reader = new BufferedReader(fileReader); 

      zkratkyArray = new String[lines + 1][2]; 
      String line; 
      int row = 0; 
      while ((line = reader.readLine()) != null) { 
       String[] array = line.split(","); 
       for (int i = 0; i < array.length; i++) { 
        zkratkyArray[row][i] = array[i]; 
       } 
       row++; 
      } 
      reader.close(); 
      fileReader.close(); 
     } catch (FileNotFoundException e) { 
      System.out.println("Soubor se zkratkami nenalezen."); 
      zkratkyArray = new String[0][0]; 
     } 

回答

0

最後,我發現我有BOM在input.csv文件。

0

你在這裏使用正則表達式的任何我不認爲。你只是讀一個suustring並用另一個替換它。

只需使用不使用正則表達式的其他版本:

fileContentsSingle.replace(oldString, newString); 
+0

你的意思是'replace(String,String)'? – Kayaman 2014-11-25 08:14:27

+0

是的,我的錯誤,這就是我的意思。 – Eypros 2014-11-25 08:24:23

1

您的代碼將正常工作的「HT我是機器人」。如果您for循環後打印fileContentsSingle,將打印您希望它打印的內容:

final String[][] zkratkyArray = new String[2][]; 
zkratkyArray[0] = new String[] { "ht", "hello there" }; 
zkratkyArray[1] = new String[] { "wru", "who are you" }; 

String fileContentsSingle = "ht I am robot"; 

for (String[] aZkratkyArray1 : zkratkyArray) { 
    String oldString = " " + aZkratkyArray1[0] + " "; 
    String firstString = aZkratkyArray1[0] + " "; 
    String newString = " " + aZkratkyArray1[1] + " "; 

    fileContentsSingle = fileContentsSingle.replaceAll(oldString, newString); 
    if (fileContentsSingle.startsWith(firstString)) { 
     fileContentsSingle = aZkratkyArray1[1] + " " 
       + fileContentsSingle.substring(firstString.length(), fileContentsSingle.length()); 
    } 
} 

System.out.println(fileContentsSingle); // prints "hello there I am robot" 

關於「我是機器人HRU」,這是行不通的,因爲「HRU」是在String結束,之後沒有空格,並且您要替換的String是「hru」(空格之前和之後)。

由於您不使用正則表達式,因此不需要replaceAll(),您可以使用replace()來代替。

使用正則表達式,你可以做一個更通用的解決方案在該行工作處處:

final String[][] zkratkyArray = new String[2][]; 
zkratkyArray[0] = new String[] { "ht", "hello there" }; 
zkratkyArray[1] = new String[] { "wru", "who are you" }; 

String fileContentsSingle = "ht I am robot wru"; 

for (String[] aZkratkyArray1 : zkratkyArray) { 
    fileContentsSingle = fileContentsSingle.replaceAll("\\b" + Pattern.quote(aZkratkyArray1[0]) + "\\b", 
      Matcher.quoteReplacement(aZkratkyArray1[1])); 
} 

System.out.println(fileContentsSingle); // hello there I am robot who are you 
+0

嗯,問題是,它不能正常工作,即使我是機器人ht .. – 2014-11-25 08:31:58

+0

@FilipKraus它的工作原理,請參閱http://ideone.com/lBEnFl我粘貼第一個代碼塊,它正確地打印「你好,我是機器人「。 – 2014-11-25 08:48:16

+0

我支持我的代碼。 如果我即將使用您的代碼,您能幫我編輯我的輸入,以便它適用於您的代碼嗎? 這對我非常有幫助。 – 2014-11-25 08:57:41