String a = "77*b+7-77/98+6";
String b[] = a.split("[*+-/]"); // works fine
b[] = a.split("[+/- *]"); // gives pattern syntax exception because of " * "
b[] = a.split("[*/+-]"); // works fine
b[] = a.split("[-*]"); // works fine
请帮我解决这个问题。
答案 0 :(得分:3)
在正则表达式中,方括号[]
表示character class。字符类可以包含两个字符,并用连字符a-z
隔开,以表示字符的范围。
这意味着如果使用连字符,并且范围的任一端均无效,则这是无效的模式。在这种情况下,必须使用Java中的\\-
来转义此连字符。
但是,如果在字符范围的开始或 end 处使用连字符,则连字符不会被视为元字符-因为它不能是范围。因此,您的其他模式也可以使用,因为连字符可以有效地转义。
b[] = a.split("[*/+-]"); // works fine
^ at the end
b[] = a.split("[-*]"); // works fine
^ at the start
第一个表达式具有+-/
,这是ASCII character set中从+
到/
的有效范围,等效于文字字符+,-./
。 / p>
错误的表达式具有/-
,即从/
到SPACE
的范围。 SPACE
是字符32
,而/
是字符47
,因此您的范围是47-32
,范围是向后。