假设我们有以下字符串:
"test01,test02,test03,exceptional,case,test04"
我想要的是将字符串拆分为字符串数组,如下所示:
["test01","test02","test03","exceptional,case","test04"]
我怎么能用Java做到这一点?
答案 0 :(得分:6)
这种负面的外观正则表达式适用于你:
(?<!exceptional),|,(?!case)
Java代码:
String[] arr = str.split("(?<!exceptional),|,(?!case)");
<强>解释强>
此正则表达式与逗号匹配,如果这两个条件中的任何一个符合:
exceptional
,使用负面的lookbehind (?<!exceptional)
case
,(?!case)
醇>
当逗号被任意一侧的exceptional
和case
包围时,实际上不允许拆分逗号。
答案 1 :(得分:1)
@anubhava's answer非常好用。完成后,这是一个适用于许多解决方案并使用一个非常简单的正则表达式的通用解决方案:
exceptional,case|(,)
交替|
的左侧匹配完成exceptional,case
。我们将忽略这些匹配。右侧匹配并捕获第1组的逗号,我们知道它们是正确的,因为它们与左侧的表达式不匹配。然后我们用一些独特的东西替换这些逗号,并将其拆分为该字符串。
此程序显示了如何使用正则表达式(请参阅online demo底部的结果):
String subject = "somethingelse,case,test02,test03,exceptional,case,test04,exceptional,notcase";
Pattern regex = Pattern.compile("exceptional,case|(,)");
Matcher m = regex.matcher(subject);
StringBuffer b= new StringBuffer();
while (m.find()) {
if(m.group(1) != null) m.appendReplacement(b, "@@SplitHere@@");
else m.appendReplacement(b, m.group(0));
}
m.appendTail(b);
String replaced = b.toString();
String[] splits = replaced.split("@@SplitHere@@");
for (String split : splits) System.out.println(split);
参考
答案 2 :(得分:0)
Java如何理解exceptional,case
是一个单词而不是分裂?
仍然如果有其他一些重复出现的角色,例如""
,你可以将其拆分。
对于前。如果它是
"test01","test02","test03","exceptional,case","test04"
您可以使用","
所以在你的情况下,除非你使用正则表达式,否则它是不可能的。
答案 3 :(得分:0)
这是一个简单的答案,不知道为什么我昨天没有想到它:
(?<!exceptional(?=,case)),
<强>解释强>
逗号(正则表达式的最后一个字符),前面没有exceptional
后跟,case
答案 4 :(得分:-1)
您可能想要使用 split()
像这样:
String[] array = "test01,test02,test03,exceptional,case,test04".split(",");