Java中如何按多个符号拆分字符串

17

当遇到符号“+,-,*,/,=”时,我希望能够拆分字符串。

我正在使用split函数,但该函数只能接受一个参数。而且它在处理“+”符号时不起作用。

我正在使用以下代码:

Stringname.split("Symbol");

谢谢。


你是否已经开始阅读Javadoc了?其中一定有解释为什么在“+”上分割不能得到你想要的结果。 - Sotirios Delimanolis
也许可以看一下这个链接:https://dev59.com/72s05IYBdhLWcg3wB9ef - kadrian
4个回答

48

String.split方法的参数需要一个正则表达式。

这意味着您可以在一个参数中交替使用任何符号或文本抽象来分割String

请参阅此处的文档

以下是您的示例:

String toSplit = "a+b-c*d/e=f";
String[] splitted = toSplit.split("[-+*/=]");
for (String split: splitted) {
    System.out.println(split);
}

输出:

a
b
c
d
e
f

注意事项:

  • Pattern中的保留字符必须使用\\进行双重转义。 编辑: 不需要在这里。
  • 模式中的[]括号表示字符类。
  • 更多关于Pattern的信息请参考此处

@RohitJain 是的,我刚意识到。我已经编辑了我的回答,感谢你指出。 - Mena
@saumyaraj,我不明白你的问题? - Mena
我的意思是,当我在split函数中使用“+”时,它会显示类似于“悬挂元字符”的错误。你能解释一下这个错误吗?谢谢。 - Saumyaraj
@saumyaraj 是的。那是一个元字符,也就是Pattern中的保留字符。它表示一个量词(详见Pattern页面)。在字符类中它可以正常工作,但如果在字符类外被解释为字面意义上的“+”,则需要进行转义。在你的情况下,只需尝试将其双重转义为\\+而不是+即可。 - Mena

10

您可以使用正则表达式:

String[] tokens = input.split("[+*/=-]");

注意:- 应放置在第一位或最后一位,以确保它不被视为范围分隔符。


1
input.split("[+*-/=]"); 还包括 ,.。只是以 "a,b.c" 为例,因为从 */ 的范围包括这些字符。 - jlordo
input.split("[+*/-=]"); 包括数字、冒号、分号和 < 符号。 - jlordo
字符类中的破折号总是被视为范围分隔符,除非它位于第一个或最后一个位置。 - jlordo

6

你需要正则表达式。此外,你需要使用正则表达式中的OR运算符:

String[]tokens = Stringname.split("\\+|\\-|\\*|\\/|\\=");

1

为此,您需要使用适当的正则表达式语句。您列出的大多数符号都是正则表达式保留字符,因此您必须使用\进行转义。

一个非常基本的表达式是\+|\-|\\|\*|\=。相对容易理解,您想要的每个符号都用\进行了转义,并且每个符号都用|(或)符号分隔开来。例如,如果您还想添加^,只需将|\^追加到该语句即可。

对于测试和快速表达式,我喜欢使用www.regexpal.com


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接