2013-02-23 62 views
0

可以说我有这个表达式I10I20I-3++应该给我27.我似乎无法找到一种方法来删除那些I的,或者如果它是来自字符串的任何其他字母。另外,我必须找出一种方法来评估表达。我尝试使用正则表达式,但没有运气:从字符串中提取操作数和操作符

public static String removeIs(String input) 
{ 
    //String check = input.replaceAll("[^/+/-/*//^0-9/-]+", " "); 
    String check = input.replaceAll("[^-+*/^0-9/-](?![^(]*\\))"," "); 
    return check; 
} 
+0

我认为你应该检查'如何评估在java中缀表达式' 链接:http://stackoverflow.com/questions/7185589/how-to-calculate-expression-in-java – Arpit 2013-02-23 09:50:05

+1

什么是'I10I20I-3 ++'?它只是一个测试字符串?你是什​​么意思,应该给我27''? – Wookie88 2013-02-23 09:54:21

+0

@ Wookie88 - 它是一个计算器表达式,其中操作数由'I'分隔,操作员都在最后。 – Perception 2013-02-23 09:58:05

回答

1

寻找任何非运营商非数字字符的表达式为:

[^0-9+\-\*\/]

你在Q下面的评论说,你正在写计算器。请注意,您的字符串中的数字和运算符数量未知,所以最好是循环遍历字符串并手动获取数字和运算符以便在计算器中使用,而不是使用正则表达式反向引用。顺便说一句:你为​​什么用空格替换I?它对你有什么影响什么是字符串中的分隔符?

不久前,我已经创建了一个相当先进的基于正则表达式的JS代码解析器,从这个经验我可以告诉创建一个,一次解析所有东西的怪异表达式通常是不好的主意。