2012-10-24 49 views
0

好吧我有一個方法,當我使用string.replace()它替換文本,但它工作,但當我切換到relpaceFirst ()如下所示它不再有效,我在做什麼錯誤或在這裏失蹤?Java的字符串.replaceFirst是不工作,我不知道它的錯誤或我做錯了

private void acceptAccButtonActionPerformed(java.awt.event.ActionEvent evt) {  
    int selectedAcTableItem = validAcTable.getSelectedRow(); 
    int selectedSugTableItem = suggestedAcTable.getSelectedRow(); 
    if (selectedAcTableItem > 0) { 
     String acNameDefthmlText = htmlText; 
     String parensName = ""; 
     String acName = validAcTable.getValueAt(selectedAcTableItem, 0).toString(); 
     String acDef = validAcTable.getValueAt(selectedAcTableItem, 1).toString(); 
     String acSent = validAcTable.getValueAt(selectedAcTableItem, 2).toString(); 
     StringBuilder acBuilder = new StringBuilder(acDef); 
     acBuilder.append(" (").append(acName).append(")");    
     if (!acDef.equals("")) { 
      parensName = " (" + acName + ")"; 
      if (htmlText.contains(acName) && !htmlText.contains(acBuilder)){ 
       String acReplace = acBuilder.toString(); 
       String acOrigDefName = acDefRow + parensName; 
       if (htmlText.contains(acOrigDefName) && parensName.contains(acOrigName)){ 
        acNameDefthmlText = htmlText.replaceFirst(acOrigDefName, acReplace); 
       } else if (htmlText.contains(acName)) { 
        acNameDefthmlText = htmlText.replaceFirst(acName, acReplace); 
       } 
       htmlText = acNameDefthmlText; 

      }     
      validAcTable.setValueAt(true, selectedAcTableItem, 2); 
      Acronym acronym = createNewAcronym(acName, acSent, acDef, true); 
      try { 

       AcronymDefinitionController.sharedInstance().writeAcronymToExcelSheet(acName, acDef); 
      } catch (IOException ex) { 
       Exceptions.printStackTrace(ex); 
      } catch (InvalidFormatException ex) { 
       Exceptions.printStackTrace(ex); 
      } 
      if (validAcTable.getRowCount() - 1 >= validAcTable.getSelectedRow() + 1) { 
       validAcTable.changeSelection(selectedAcTableItem + 1, 0, true, true); 
      } 
      validAcTable.repaint(); 
     } 
    } 
+1

什麼是你的輸入,輸出什麼,你得到的,並且你希望輸出什麼? – Michael

+1

不工作是什麼意思?你能舉一個例子來說明它在哪些情況下不適用於代碼?另外,如果你有某種方式,作爲第一個參數的'empty'字符串,在'replaceFirst'中,它會背叛你,並以你沒有想到的方式工作。 –

+1

只是限制你的代碼不工作,如果可能的話,用實際數據而不是變量將它寫成單元測試。 –

回答

3

如果您發現兩種方法有問題的簽名:

replace(char oldChar,char newChar); 
replace(CharSequence target, CharSequence replacement); 

replaceFirst(String regex, String replacement); 

正如你所看到的,在replaceFirst你匹配的參數被視爲regex(正則表達式),這將導致如果差任何特殊的字符參與論證。

例如:以下考慮:

System.out.println("abcdab".replace("ab", "ef")); //<- replaces all 
System.out.println("abcdab".replaceFirst("ab", "ef"));//<-replaces first 
System.out.println("\\abcdab".replace("\\ab", "ef")); //<-replaces first 
System.out.println("\\abcdab".replaceFirst("\\ab", "ef")); 
//^ doesn't replace as `\` is an special char 
+0

Ohhh ok ....我明白非常感謝Yogendra。 – yams

+0

我錯誤地認爲你通過了目標。 – yams

+0

解決了這個問題,當我用正則表達式替換字符串時,它像魅力一樣工作。 – yams

相關問題