2017-05-04 147 views
1

我正在获取用户输入的字符串,我需要验证它是以这种格式“操作数空格运算符空间操作数”还是“2 + 5 * 7^2”。这是用java编写的。我已经研究了几个小时,并尝试正则表达式和循环。我只是无法弄清楚如何验证字符串。以下是我尝试过的一些代码。在这个例子中,我将字符串转换为字符。Java验证字符串公式

 for(int i = 0; i < s.length(); i++){ 
      char x = s.charAt(i); 
      if(!(Character.isDigit(x) || x == '/' || x == '*' || 
       x == '+'|| x== '-' || x=='^' || x == '\n')) 
        throw new InValidCharacterExpression("Invalid expression. Please try again."); 
    } 
    } 
+2

他们COMPA环形字符,不是字符串,除非我失去了一些东西。 – Carcigenicate

+2

@tnw,这是比较字符。无论如何,我认为答案会涉及到正则表达式。 –

+0

@SteveSmith我的错误。缩短近距离投票。 – tnw

回答

0

如何寻找运营商如+ - * /然后在字符串操作之前和之后的空间各部分计数量,拆分两个部分,然后修整的结果,将其转换为编号

0

我不能确定你要找的内容表达的准确匹配,但这里有一个开始(使用正则表达式)

public class ValidateExp { 
    public static boolean validate(String s) { 
     Pattern p = Pattern.compile("^(-? ?\\d*[\\.,]?\\d+ ?[\\/\\+\\-\\*\\-\\^])+(-? ?\\d*[\\.,]?\\d+)$"); 
     Matcher m = p.matcher(s); 

     if(m.find()) 
      return true; 

     return false; 
    } 
} 

这是可选的,你想无论是否用空格分隔符和操作数:

  • 10+10 true
  • 10 + 10 true
  • 10+ 10 true
  • 10 + false
  • 10 *+ 10 false
  • 1 * 1^10 true
  • 1 * 1^10 true
+0

该表达式会像“10 * 2 - 15/3^2” – user7963685

+0

我更新了我的答案。 – eli