Java matcher返回额外的"&引用;产量

Java matcher返回额外的"&引用;产量,java,regex,Java,Regex,这是我的项目java程序的一部分 String ops=""; String input="1+3-4+(7/8)+cos(sin(50)+2)/2+tan(90)*e^(5+26-4/1*2)"; input=input.replaceAll("cos", "c").replaceAll("sin", "s").replaceAll("tan", "t").replace("e", "2.718"); //System.out.println(input); Pattern pattern=P

这是我的项目java程序的一部分

String ops="";
String input="1+3-4+(7/8)+cos(sin(50)+2)/2+tan(90)*e^(5+26-4/1*2)";
input=input.replaceAll("cos", "c").replaceAll("sin", "s").replaceAll("tan", "t").replace("e", "2.718");
//System.out.println(input);
Pattern pattern=Pattern.compile("[+-/*()cst^]");
Matcher matcher= pattern.matcher(input);
while (matcher.find()) {ops+=matcher.group();}
System.out.println(ops);

在这里,我只是阅读输入并给出其中存在的+,-,/,*,(,),c,s&t的输出。当输出返回时,
ops
应该返回
+-++(/)+c(s()+)/+t()*^(+-/*)
,而它返回
+-+(/)+c(s()+)/+t(),-./
。要解决此问题,您可以将
-
置于第一个位置:

Pattern.compile("[-+/*()cst^]");

或者你也可以逃避它。更多信息:

-
用于一个范围,因此
+-/
包括
+
/
之间的所有字符(在ascii表中),即
,-./
。要解决此问题,您可以将
-
置于第一个位置:

Pattern.compile("[-+/*()cst^]");

或者你也可以逃避它。更多信息:

乍一看,这似乎是将“2.718”替换为“e”的结果,至少这是“.”的来源。我知道,但我的模式没有。乍一看,这似乎是将“2.718”替换为“e”的结果,至少这是“.”的来源。我知道,但是我的模式没有它,或者
-
可以通过
`转义。显然,在java代码中,
`必须复制才能通过java和正则表达式转义。这就是原因。谢谢。@是的,它位于字符类部分:
[a-zA-Z]a到Z或a到Z,包括(范围)
或者
-
可以通过
`转义。显然在java代码中
`必须复制才能传递java和正则表达式转义。这就是原因。谢谢。@是的,它在字符类部分:
[a-zA-Z]a到Z或a到Z,包括(范围)