2017-05-04 41 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