2011-11-29 63 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

相关问题