我正在尝试从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 []最终会出现看起来像这样的空白插槽 - > “”不知道为什么这样做
答案 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("")
,它就会被分成单个字符。