Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中,如何拆分字符串而不使用括号中的分隔符?_Java_Regex_Split - Fatal编程技术网

在Java中,如何拆分字符串而不使用括号中的分隔符?

在Java中,如何拆分字符串而不使用括号中的分隔符?,java,regex,split,Java,Regex,Split,我想用逗号分割字符串,但我想忽略括号之间的逗号 例如: Input: a1:b1, a2:b2, [a3:b3-c3, b4, b5], a4:b6 Output: a1:b1 a2:b2 [a3:b3-c3, b4, b5] a4:b6 提前感谢您的帮助。为了精确起见,您必须逐个字符进行解析,否则您可以进行如下操作: (伪代码) 注意:在步骤1中,您不需要手动替换占位符,而是使用正则表达式(例如/[[^]]+]/)将括号替换为占位符(并存储它们),然后在步骤3中重新替换 例如: 输入: a

我想用逗号分割字符串,但我想忽略括号之间的逗号

例如:

Input:
a1:b1, a2:b2, [a3:b3-c3, b4, b5], a4:b6

Output:
a1:b1
a2:b2
[a3:b3-c3, b4, b5]
a4:b6

提前感谢您的帮助。

为了精确起见,您必须逐个字符进行解析,否则您可以进行如下操作:

(伪代码)

注意:在步骤1中,您不需要手动替换占位符,而是使用正则表达式(例如
/[[^]]+]/
)将括号替换为占位符(并存储它们),然后在步骤3中重新替换

例如:

输入:
a1:b1,a2:b2,[a3:b3-c3,b4,b5],a4:b6

步骤1:中间输出:
a1:b1、a2:b2、1、a4:b6

步骤2:中间输出:


a1:b1
a2:b2
__占位符1_
a4:b6

步骤3:输出:

a1:b1
a2:b2
[a3:b3-c3、b4、b5]
a4:b6


实际上,您在这里所做的是分层的拆分和替换,因为没有正则表达式可以匹配上下文敏感(因为没有正则表达式可以计算偏执)。

您可以使用此正则表达式
,(?![^\[]*])

它将忽略方括号内的所有逗号

:

输出:

[a1:b1,  a2:b2,  [a3:b3-c3, b4, b5],  a4:b6] 

你的意思是替换括号内的逗号,对3@keyser不,用一个不同的占位符替换整个括号(包括括号内的逗号),然后用剩余的逗号拆分,然后用原始值替换占位符。好的,“替换所有括号”仍然有点误导。也许是“中间”或“内部”或其他什么。让我困惑的部分还在那里though@Delibz你好像掉进了和我一样的陷阱。Nikos的意思是,你应该用占位符替换括号内的所有内容,例如
&
,然后用逗号分割整个字符串,然后切换回
&
。实际上,它依赖于一个否定的前瞻,断言不可能匹配一个非
的字符[
直到第一个
]
。请参阅。注意:稍后,如果您有不同的分隔符,可以用其他分隔符替换
[
]
String str="a1:b1, a2:b2, [a3:b3-c3, b4, b5], a4:b6";
System.out.println(Arrays.toString(str.split(",(?![^\\[]*\\])")));
import java.util.Arrays;
public class HelloWorld{

     public static void main(String []args){
        String str="a1:b1, a2:b2, [a3:b3-c3, b4, b5], a4:b6";
        System.out.println(Arrays.toString(str.split(",(?![^\\[]*\\])")));
     }
}
[a1:b1,  a2:b2,  [a3:b3-c3, b4, b5],  a4:b6]