我正在尝试拆分一个字符串,该字符串可以由用户指定的任何字符或字符分隔,例如逗号,分号和/或管道。为了清洁和灵活,我理想地喜欢这些数组中的delim(无论是字符串,字符串还是正则表达式,无论是否有效)。
String[] stringsToSplit = {"alpha,bravo,charlie", "delta;echo;foxtrot", "golf|hotel|india", "juliet\nkilo\nlima"};
String[] acceptedNonEscapedDelims = {"," , ";"};
String[] acceptedEscapedDelims = {"\\|" , "\\n"};
我只能使用硬编码的正则表达式来使用它。
String[] values = string.split("\\n|\\||\\t|,|;");
将正则表达式存储在字符串数组中的方法是,以下操作不起作用。
String[] values = string.split(acceptedEscapedDelims[0]);
我可以为每个可能的分隔符创建一个布尔标志,并使用每个单独硬编码分割,但这种方法对我来说似乎是hackery。对于这么简单的事情,它也是看似狡猾的。如果单独处理每个分隔符,则需要进行大量特殊处理:例如。测试字符串是否包含逗号(在尝试使用逗号分割之前),否则您将获得单个字符的数组元素。
答案 0 :(得分:1)
您只能使用单个字符进行拆分,因此请尝试使用[abcde]
(“其中一个”)表单而不是a|b|c|d|e
。演示:
System.out.println( Arrays.toString( "a;b.c|d".split( "[;.|]") ));
输出:
[a, b, c, d]