2011-11-29 60 views
1

我得到這個標籤內JSON格式響應的一些圖片:如何替換|| (兩個管道)從一個字符串中加入| (一個)管

「xmlImageIds」:「57948916 || 57948917 || 57948918 || 57948919 || 57948920 || 57948921 || 57948 922 || 57948923 || 57948924 || 57948925 || 57948926 || 5794892"

我想要做的就是使用.split每個圖像ID分隔字符串類的( 「||」)。然後用這個圖像ID附加URL並顯示它。我試過.replace("\"|\"|","\"|");但它不適合我。請幫忙。

編輯:Shabbir,我試圖根據您的意見更新您的問題。如果我沒有正確理解,請再次編輯它。

+1

它只會失敗與管道字符?你是否嘗試過其他角色才能確定? – Kris

+0

是的,它只能通過管道字符 –

+0

失敗作爲一個絕望的措施,你可以嘗試一個兩遍?首先刪除其中一個條,然後再次進行提取數據,即。 – Kris

回答

13

使用

.replace("||", "|"); 

|無特殊字符。

但是,如果你正在使用split()replaceAll代替replace(),當心,你需要躲避管道符號作爲\\|,因爲這些方法需要一個正則表達式作爲參數。

例如:

public static void main(String[] args) { 
    String in = "\"xmlImageIds\":\"57948916||57948917||57948918||57948919||57948920||57948921||57948‌922||57948923||57948924||57948925||57948926||5794892\"".replace("||", "|"); 

    String[] q = in.split("\""); 
    String[] ids = q[3].split("\\|"); 
    for (String id : ids) { 
     System.out.println("http://test/" + id); 
    } 
} 
+0

我也嘗試過這一個,但它不工作。 –

+0

它應該。你可以更新你的**問題**來包含你的代碼和輸入嗎? – nfechner

+1

我在此標記「xmlImageIds」中獲得了json格式的某些圖像的響應:「57948916 || 57948917 || 57948918 || 57948919 || 57948920 || 57948921 || 57948922 || 57948923 || 57948924 || 57948925 || 57948926 || 5794892「。我想要做的是使用字符串類的.split(」||「)來分隔每個圖像ID。然後用這個圖像ID附加url並顯示它。 –

0
String pipe="pipes||"; 
    System.out.println("Old Pipe:::"+pipe); 
    System.out.println("Updated Pipe:::"+pipe.replace("||", "|")); 
1

根據http://docs.oracle.com/javase/6/docs/api/java/lang/String.htmlreplace()需要char!而非String秒。也許你應該嘗試replaceAll(String, String)而不是?要麼,要麼嘗試將您的字符串("")引號改爲char('')引號。

編輯:我只注意到replace()的過載需要CharSequence。儘管如此,我仍然會嘗試replaceAll()

+0

'replaceAll()'採用正則表達式作爲它的第一個參數,我不確定它在這種情況下是否需要,是嗎? –

+0

是的,我不認爲這是必需的。它會起作用,但它不會是最好的方式。我剛剛發佈了一個新的答案,我認爲(和希望)將解決問題。 –

1

我不記得它是如何工作的是方法......但是你可以讓你自己:

String withTwoPipes = "helloTwo||pipes"; 
    for(int i=0; i<withTwoPipes.lenght;i++){ 
     char a = withTwoPipes.charAt(i); 
     if(a=='|' && i<withTwoPipes.lenght+1){ 
     char b = withTwoPipes.charAt(i+1); 
     if(b=='|' && i<withTwoPipes.lenght){ 
      withTwoPipes.charAt(i)=''; 
      withTwoPipes.charAt(i+1)='|'; 
     } 
     } 
    } 

我認爲,像這樣的代碼應該工作...它不是一個完美的答案,但可以提供幫助。 ..

3

我想我知道你的問題是什麼。您需要分配replace()的結果,而不僅僅是調用它。

String s = "foo||bar||baz"; 
s = s.replace("||", "|"); 
System.out.println(s); 

我測試了它,只是打電話s.replace("||", "|");似乎沒有修改字符串;您必須將該結果返回到s

編輯:Java 6規範說「返回一個新字符串由於用newChar替換此字符串中出現的所有oldChar。」 (重點是我的)。

+0

指出返回修改過的字符串的好處! – trillions

相關問題