2013-12-08 41 views
0

我有一個問題,試圖替換數組中的字符串的一部分。基本上,我有其中包含的字符串:如何替換數組中的字符串的一部分?

關係(ATT1,ATT2,ATT3)\ nRelation(ATT1,ATT2,ATT3)

我有分裂基於 「\ n」 個字符串和存儲到一個數組: [關係式(ATT1,ATT2,ATT3),關係式(ATT1,ATT2,ATT3)]

我的問題是替換的字符串的這一部分:(att1,att2,att3)( )爲陣列中的每個元件。下面是我的代碼片段:

  String txt = "Relation(att1,att2,att3)\nRelation(att1,att2,att3)"; 
      StringBuilder sb = new StringBuilder(); 
      sb.append(txt); 
      String[] myArray = sb.toString().split("\n"); 
      int startIdx = sb.indexOf("("); 
      int endIdx = sb.indexOf(")"); 
      int i; 
      for(i=0; i<myArray.length; i++){ 
       myArray[i] = myArray[i].replace(startIdx,endIdx,"(  )"); 
      } 
      System.out.println("---- Single Array ------"); 
      System.out.println(Arrays.toString(myArray)); 

的問題是行內的for循環,它給我的錯誤,說明

在String類型「替換(字符,字符)不適用對於 參數(INT,INT,字符串)」

我研究其他方法,但沒有發現任何東西儘量靠近使用的StringBuilder和的indexOf滿足我的需求。有關如何解決這個問題的任何建議?

+0

所以你基本上要一個空間來代替括號內的一切字符串? – Blub

+0

您試圖調用字符串類的'replace'方法不需要兩個索引。 – merlin2011

+0

@EdgarBoda是的,所以例如(a,b,c)被替換爲() – user11998

回答

1

沒有方法來替換這樣的字符串的特定部分。你可以打出的開頭和結尾部分有兩個子調用來代替:

String txt = "Relation(att1,att2,att3)\nRelation(att1,att2,att3)"; 
String[] myArray = txt.replaceAll("\\(.*?\\)", "(  )").split("\n"); 
+0

是你在括號內使用的正則表達式嗎? – user11998

+0

@ user3080993是的。 – Boann

+0

啊,好吧,謝謝一堆。認爲我應該閱讀正則表達式,因爲它將在未來變得非常方便 – user11998

1
  • 的功能與string.replace有:

    myArray[i] = myArray[i].substring(0, startIdx) + 
        "(  )" + myArray[i].substring(endIdx + 1); 
    

    您可以用正則表達式雖然比較簡單地做到這一點兩個參數:replace(CharSequence target, CharSequence replacement)replace(replace(char oldChar, char newChar)。但是你試圖提供三種:replace(startIdx, endIdx, "( )")

  • 使用replaceAll(regex, replacement)函數首先將所有(X)替換爲()

  • ,然後分裂各地\n

    String str = "Relation(att1,att2,att3)\nRelation(att1,att2,att3)".replaceAll("\\(.*\\)", "()"); 
    
    String splitStr[] = str.split("\n"); 
    
+0

是的,我意識到,當我日食告訴我與.replace的問題。 – user11998

+0

@ user3080993,檢查更新後的答案 – Sage

+0

Ahh好的,我聽說過正則表達式,但是看起來當我做PHP時看起來很嚇人。我會記住這一點,因爲我將來可能會經常使用正則表達式 – user11998

相關問題