在分隔符处难以分割字符串并保持它

问题描述:

我有一对成对读取的字符串,用逗号分隔。但是,我并不总是希望以逗号分割,因为输入中不总是有1个逗号。例如,字符串在分隔符处难以分割字符串并保持它

(http://www.wolframalpha.com/input/?i=103%2F30+%3D+4a-3b,+71%2F60+%3D+a+%2B+b 
,http://www.wolframalpha.com/input/?i=x%5E2%2B5x%2B6,file:///tmp/foo/bar/p,d,f.pdf) 

全部读入一行。对于这种情况,我只想分割字符串中的,h和其他字符。实际上,在分割之后,字符串应该是:

http://www.wolframalpha.com/input/?i=103%2F30+%3D+4a-3b,+71%2F60+%3D+a+%2B+b 

http://www.wolframalpha.com/input/?i=x%5E2%2B5x%2B6 

file:///tmp/foo/bar/p,d,f.pdf 

在第一个字符串中维护逗号的顺序。 (我会摆脱括号)。我已经看过this堆栈溢出问题,虽然有帮助,但没有正确拆分这个字符串。这是用Java编写的。任何帮助表示赞赏。

您可以使用正则表达式来进行拆分。请参阅下面的代码片段。

String str = "(http://www.wolframalpha.com/input/?i=103%2F30+%3D+4a-3b,+71%2F60+%3D+a+%2B+b,http://www.wolframalpha.com/input/?i=x%5E2%2B5x%2B6)"; 
String[] strArr = str.split("(,(?=http))"); 

您将拥有根据您的要求所有可能的值的数组。

+0

这是正确的和适应性的。 –

+0

@Nick谢谢:))。 – SachinSarawgi

+0

@SachinSarawgi也许标记为正确的答案呢? :-) – rob

在'http'上分割,然后重新添加它。

伪代码

String input = "http://www.wolframalpha.com/input/?i=103%2F30+%3D+4a-3b,+71%2F60+%3D+a+%2B+b 
,http://www.wolframalpha.com/input/?i=x%5E2%2B5x%2B6" 

List<String> split = input.split('http'); 
List<String> finalList = new ArrayList<String>(); 

for(String fixup in split) 
{ 
    finalList.put("http" + fixup); 
} 

最终应该包含两个URL。

+0

您可能还需要修剪尾随的逗号 – Freiheit

+0

如果URL中缺少'http:'(协议部分),该怎么办? – Yoram

+1

@Yoram - 如果http部分丢失,那么它不是一个URL。基于给出的示例,我假设这是逗号分隔的URL列表,其中可能包含URL中的逗号。如果它是逗号分隔的其他可能包含逗号的列表,则需要不同的解决方案。 – Freiheit