如何在java 7中转义括号?

时间:2017-07-02 03:58:14

标签: java

我正在尝试从BufferedReader.readLine()

中分割一些输入
String delimiters = " ,()";
String[] s = in.readLine().split(delimiters);

这给了我一个运行时错误。

我尝试过的东西不起作用:

String delimiters = " ,\\(\\)"; 

String delimiters = " ,[()]";

String[] s = in.readLine().split(Pattern.quote("() ,"));

我尝试使用.replaceAll替换(),无法正常工作

我试过了:

    input = input.replaceAll(Pattern.quote("("), " "); 
    input = input.replaceAll(Pattern.quote(")"), " ");
    input = input.replaceAll(Pattern.quote(","), " ");
    String[] s = input.split(" ");

但是s []最终会出现看起来像这样的空白插槽 - > “”不知道为什么这样做

2 个答案:

答案 0 :(得分:1)

矿山工作,

String delimiters = "[ \\(\\)]"

编辑:

你忘记了方形brakcets,它表示“框中的任何字符都将用作分隔符”,它是一个正则表达式。

编辑:

删除空元素:想法是将分隔符集的任何anagram替换为1分隔符

像。

    // regex to match any anagram of a given set of delimiters in square brackets

    String r = "(?!.*(.).*\1)[ \\(\\)]";

    input = input.replaceAll(r, "(");

    // this will result in having double or more combinations of a single delimiter, so replace them with just one

    input = input.replaceAll("[(]+", "(");

然后您将获得任何单个分隔符的输入。然后使用拆分,它不会有任何空白的单词。

答案 1 :(得分:0)

来自你的评论:

  

但我只输入1行:(1,3),(6,5),(2,3),(9,1)我需要13652391所以s [0] = 1,s [1] = 3,...但我得到s [0] =“”s [1] =“”s [2] = 1

你得到的是因为你的分隔符是 “”,“,”,“(”或“)”所以它会在每个分隔符处分开,即使它们之间没有其他字符,在这种情况下,它将被拆分为空字符串。

可以轻松解决此问题,只需删除空元素即可!

List<String> list = Arrays.stream(
    "(1,3), (6,5), (2,3), (9,1)".split("[(), ]")).filter(x -> !x.isEmpty())
    .collect(Collectors.toList());

但是你得到List而不是数组。

另一种方法是将“[(),]”替换为“”:

String result = "(1,3), (6,5), (2,3), (9,1)".replaceAll("[(), ]", "");

这会给你一个字符串作为结果。但是从评论中我不确定你是否想要一个字符串。如果你想要一个数组,只需调用.split(""),它就会被分成单个字符。