在Java正则表达式字符串中查找括号

在Java正则表达式字符串中查找括号,java,arrays,regex,split,Java,Arrays,Regex,Split,我试图使用正则表达式将给定字符串中所有不同类型的方括号,即(、{和[)放入数组,但我不知道如何操作。 这是我目前的代码: String s = "{[()]}"; String regexStr = "\\( | \\) | \\[ | \\] | \\{ | \\}"; Pattern p = Pattern.compile(regexStr); String[] splitStr = p.split(s); 但是,当我打印数组时,只有一个元素是原始字符串:“{[()]}”。我不确定我的re

我试图使用正则表达式将给定字符串中所有不同类型的方括号,即
(、{和[
)放入数组,但我不知道如何操作。 这是我目前的代码:

String s = "{[()]}";
String regexStr = "\\( | \\) | \\[ | \\] | \\{ | \\}";
Pattern p = Pattern.compile(regexStr);
String[] splitStr = p.split(s);
但是,当我打印数组时,只有一个元素是原始字符串:
“{[()]}”
。我不确定我的regexStr是否正确,我在数组旁边添加了空格,因为当我没有留下空格时,数组中没有添加任何内容


regexStr在我没有空格时使用的在线Java正则表达式检查器中工作,但在我的代码中似乎不起作用。

您可以这样做:

public static void main(String[] args) throws FileNotFoundException {
    ArrayList<String> temp = new ArrayList<String>();
    String s = "{[()]}";
    String regexStr = "[\\{|\\}|\\(|\\)|\\[|\\]]";
    Pattern p = Pattern.compile(regexStr);
    Matcher m = p.matcher(s);
    while(m.find())
    {
        temp.add(m.group());
    }
    //If you want to add results to an array...
    String[] results = new String[temp.size()];
    for(int i = 0; i < temp.size(); i++)
    {
        results[i] = temp.get(i);
    }
    for(String a : results)
    {
        System.out.println(a);
    }
}
publicstaticvoidmain(字符串[]args)抛出FileNotFoundException{
ArrayList temp=新的ArrayList();
字符串s=“{[()]}”;
字符串regexStr=“[\\{\\\}\\\\(\\\)\\\[\\\\]]”;
Pattern p=Pattern.compile(regexStr);
匹配器m=匹配器p;
while(m.find())
{
临时添加(m.组());
}
//如果要将结果添加到数组中。。。
字符串[]结果=新字符串[temp.size()];
对于(int i=0;i
为什么不直接使用
“{[()]}”.split(“”
例如:

String[] spl = "{[()]}".split("");
System.out.println(Arrays.toString(spl));
String s = "{[(hello)java]world}";
String[] spl = s.replaceAll("[^\\{\\}\\(\\)\\[\\]]", "").split("");
输出

[{, [, (, ), ], }]

解决方案2

如果您的输入包含其他字符,则可以先替换它们,然后使用以前的解决方案,例如:

String[] spl = "{[()]}".split("");
System.out.println(Arrays.toString(spl));
String s = "{[(hello)java]world}";
String[] spl = s.replaceAll("[^\\{\\}\\(\\)\\[\\]]", "").split("");

您可以尝试将字符串转换为字符数组,然后遍历该数组,如果存在特定的括号,请使用arraylist追加

string="Hello)"
char[] a= string.toCharArray();
ArrayList brackets= new ArrayList()<>
for(char i : a)
{
if(i==')' || any other bracket)
{
brackets.add(i);
}
}
string=“你好”)
char[]a=string.toCharArray();
ArrayList方括号=新的ArrayList()
用于(字符i:a)
{
如果(i=')'| |任何其他括号)
{
括号。添加(i);
}
}

您可以显示一些示例输出吗?您不能为此使用
split
。调用
split
的模式是边界,实际上将从分割结果中删除。我将使用@brso05的答案below@jingx事实上你可以,你只需要做一些操作,然后你就可以检查我上面的答案:)是的@brso05可能,你现在能检查我的解决方案吗?从技术上说,这是可行的,但我看不出这样做有什么好处。事实上,现在最好的答案是下面的答案,它只是循环字符串并查找单个括号字符。它比基于正则表达式的解决方案更有效,而且实际上更容易操作阅读。@jingx操作要求正则表达式,所以我们用正则表达式回答:)注意,您必须对代码1进行一些更改-您可以使用
List temp=new ArrayList();
2-当您使用
[]
之间的字符时,您不需要使用或
,因此您可以只使用
“[\\\\\\\\\\\\\\\\\\(\\\)\[\\\]]”
3-要打印列表,您只需使用
System.out.println(temp);
修复它,您的解决方案将是完美的:)