Java匹配器返回额外的"。"在输出中

时间:2015-03-04 16:37:13

标签: 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=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()*.^(+-/*)。请帮助我理解原因。

1 个答案:

答案 0 :(得分:4)

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

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

或者你也可以逃脱它。更多相关信息:How to match hyphens with Regular Expression?