【问题标题】:Finding Brackets in Java Regex String在 Java 正则表达式字符串中查找括号
【发布时间】:2017-06-20 17:32:50
【问题描述】:

我正在尝试使用正则表达式将给定字符串中的所有不同类型的括号(即(, {, and [)放入一个数组中,但我不知道该怎么做。 这是我当前的代码:

String s = "{[()]}";
String regexStr = "\\( | \\) | \\[ | \\] | \\{ | \\}";
Pattern p = Pattern.compile(regexStr);
String[] splitStr = p.split(s);

当我打印数组时,只有一个元素是原始字符串:"{[()]}"。我不确定我的 regexStr 是否正确,我在 OR 旁边添加了空格,因为当我没有留下空格时,数组中没有添加任何内容。

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

【问题讨论】:

  • 你能展示一些示例输出吗?
  • 您不能为此使用split。调用split 的模式是边界,实际上将从拆分结果中删除。我会选择下面@brso05 的答案
  • @jingx 其实你只需要进行一些操作就可以查看我上面的答案:)

标签: java arrays regex split


【解决方案1】:

你可以这样做:

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);
    }
}

【讨论】:

  • 请注意,您必须对代码进行一些更改 1- 您可以只使用 List&lt;String&gt; temp = new ArrayList&lt;&gt;(); 2- 当您使用 [] 之间的字符时,您不需要使用 or | 所以相反,您可以使用"[\\{\\}\\(\\)\\[\\]]" 3- 打印您的列表,您可以使用System.out.println(temp); 修复它,您的解决方案将是完美的:)
【解决方案2】:

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

string="Hello)"
char[] a= string.toCharArray();
ArrayList brackets= new ArrayList()<>
for(char i : a)
{
if(i==')' || any other bracket)
{
brackets.add(i);
}
}

【讨论】:

    【解决方案3】:

    为什么你不只是使用"{[()]}".split("") 例如:

    String[] spl = "{[()]}".split("");
    System.out.println(Arrays.toString(spl));
    

    输出

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

    解决方案 2

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

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

    regex demo

    【讨论】:

    • 是的 @brso05 可能,你现在可以检查我的解决方案
    • 好吧,从技术上讲这是可行的,但我认为这样做没有任何优势。事实上,现在恕我直言,最好的答案是下面的答案,它简单地遍历字符串并查找单个括号字符。它比基于正则表达式的解决方案更高效,实际上更易于阅读。
    • @jingx OP 要求正则表达式,所以我们用正则表达式回答就是这样:)
    猜你喜欢
    • 2015-08-26
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 2015-08-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多