在“上拆分Java字符串”+&引用;符号给出了一个错误
我目前正在编写一个java程序,其子任务之一是获取一个字符串并在某个位置拆分它。下面是我的一段代码:在“上拆分Java字符串”+&引用;符号给出了一个错误,java,regex,string,split,patternsyntaxexception,Java,Regex,String,Split,Patternsyntaxexception,我目前正在编写一个java程序,其子任务之一是获取一个字符串并在某个位置拆分它。下面是我的一段代码: public class Driver { public static void main(String[] args) { String str = "a+d"; String[] strparts = str.split("+"); for (String item : strparts) {
public class Driver
{
public static void main(String[] args)
{
String str = "a+d";
String[] strparts = str.split("+");
for (String item : strparts)
{
System.out.println(item);
}
}
}
我期待着结果:
a
d
然而,令我惊讶的是,我得到了:
Exception in thread "main" java.util.regex.PatternSyntaxException: Dangling meta character '+' near index 0
+
^
at java.util.regex.Pattern.error(Pattern.java:1955)
at java.util.regex.Pattern.sequence(Pattern.java:2123)
at java.util.regex.Pattern.expr(Pattern.java:1996)
at java.util.regex.Pattern.compile(Pattern.java:1696)
at java.util.regex.Pattern.<init>(Pattern.java:1351)
at java.util.regex.Pattern.compile(Pattern.java:1028)
at java.lang.String.split(String.java:2367)
at java.lang.String.split(String.java:2409)
at Test.Driver.main(Driver.java:8)
线程“main”java.util.regex.PatternSyntaxException中的异常:在索引0附近悬空元字符“+”
+
^
位于java.util.regex.Pattern.error(Pattern.java:1955)
位于java.util.regex.Pattern.sequence(Pattern.java:2123)
位于java.util.regex.Pattern.expr(Pattern.java:1996)
位于java.util.regex.Pattern.compile(Pattern.java:1696)
Pattern.(Pattern.java:1351)
位于java.util.regex.Pattern.compile(Pattern.java:1028)
位于java.lang.String.split(String.java:2367)
位于java.lang.String.split(String.java:2409)
位于Test.Driver.main(Driver.java:8)
发生了什么事?谢谢
+
是正则表达式中的一个特殊元字符,它将前一个字符重复一次或多次。您需要将其转义以匹配文本+
String[] strparts = str.split("\\+");
符号+是正则表达式的一部分,需要以反斜杠作为前缀
String[] strparts = str.split("\\+");
在文字Java字符串中,反斜杠是转义字符。文本字符串“\\”
是一个反斜杠。在正则表达式中,反斜杠也是转义字符
由于+是正则表达式中使用的一个符号,作为Java字符串,它被写成“\\+”
,我们可以从以下内容中看到:
公共字符串[]拆分(字符串正则表达式)
将此字符串围绕给定的匹配项拆分
因此,这里需要一个正则表达式
String[] strparts = str.split("\\+");
还可以为字符串创建返回类型方法。如果您想要实现其他字符串操作方法,这将使它变得更容易
public static void main(String[] args) {
String plainString = toArray("a+b");
}
public static String[] toArray(String s) {
String myArray[] = s.split("\\+");
return myArray[];
}
OP注意:或者你可以把这个字符放在一个字符类
[+]
中,这也会带走字符的特殊含义。是的,但是这太多了