这是我项目的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()*.^(+-/*)
。请帮助我理解原因。
答案 0 :(得分:4)
-
用于范围,因此+-/
包括+
和/
(在ascii表中)之间的所有字符,即,-./
。要解决此问题,您可以将-
置于第一位置:
Pattern.compile("[-+/*()cst^]");
或者你也可以逃脱它。更多相关信息:How to match hyphens with Regular Expression?