How to split a String in Java with multiple delimiters utilizing a delimiter array?
我想做的是获取一个input_string以及一个定界符的char [],然后使用该char []中的所有定界符来拆分该input_string。
这是我到目前为止的代码,但是我还没有找到在split函数中利用char []的方法。 如果这不可能,那么我意识到我可以让某人为定界符创建一个正则表达式,但这意味着尽可能简单地更改任何内容,因此添加一个额外的定界符就像将其添加到定界符一样简单。 数组。
1 2 3 4 5 6 7
| public String[] stringSplit (char[] delimiters, String input_words ) {
String[] input_words_split = null;
input_words_split = input_words. split(delimiters [0]);
return input_words_split ;
} |
-
那是什么问题呢?
-
有什么问题您是否不想遍历整个数组?
-
"可以有人创建"-对不起,不。正则表达式很难。
-
您可以读取数组并创建一个正则表达式以从中传递给String#split(),确保对所有需要转义的字符进行转义。
-
String splitRegex = Arrays.stream(new String(delimiters).split("")).map(Pattern::quote).collect(Co llectors.joining("|" )); return input_words.split(splitRegex);
-
@shmosel,太好了。
-
做到这一点要简单得多:input_words_split = input_words.split("[" + String.valueOf(delimiters) +"]");
-
@neildo特殊字符将失败。
-
@shmosel是的,如果需要使用]或[或\作为分隔符,则为true。否则应该没问题。
-
感谢您的帮助,@ shmosel,Ive从未真正使用过正则表达式,并且无论我怎么看,它们的语法都使我感到困惑。我有几个问题要问你。当我使用上面带有魔术符的代码和{ , a}来创建splitRegex之后打印splitRegex时,它给了我splitRegex = \\Q \\E|\\Qa\\E。您能否解释\ Q和\ E的含义?
-
@neildo我做了一点挖掘,如果将定界符块包含在Pattern.quote()中,则看来您的方式可以工作:return input_words.split("[" + Pattern.quote(String.valueOf(delimiters)) +"]");
-
@shmosel,B!更好。
-
@terrabl是一种转义形式。它告诉正则表达式引擎不要将它们视为特殊字符。有关更多信息,请参见此处。
以递归方式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| private static void split (String input, String[] separators, int index, List <String > output ) {
if(index == separators. length) {
output. add(input );
} else {
final String separator = separators [index ];
for (String s : input. split(separator )) {
split (s, separators, index + 1, output );
}
}
} |
如何使用 :
1 2 3 4 5 6 7 8 9 10 11
| public static void main (String[] args ) {
String input ="te,st;rr;a,e";
String[] separators = {",", ";"};
List <String > output = new ArrayList <>();
split (input, separators, 0, output );
System. out. println(output );
} |
输出:
-
问题关闭后如何发布?
-
我认为这是在问题即将解决之前发布的。
-
20分钟后发布。
-
嗯,我不太确定:o