開發中有時會遇到需要截取一個字符串中某個變量后面帶的值,並對這個值做簡單運算的情況,比如“tom, age 23, come fron us”, 這里想判斷年齡是否大於30歲,實現如下:
1 String inputstr = "tom, age 23, come fron us"; 2 String matchString = "age 變量1"; // 需要截取的變量正則表達式 3 String ruleString = "變量1 > 30"; // 比較的公式 4 5 // 1、使用正則表達式截取年齡值 6 String paramRegex = "(變量[0-9]{1,})"; 7 Pattern patternFetchParams = Pattern.compile(paramRegex); 8 Matcher matcherFetchParams = patternFetchParams.matcher(matchString); 9 10 String paramName = null; // 獲取變量名:變量1 11 if(matcherFetchParams.find()) { 12 paramName = matcherFetchParams.group(1); 13 } 14 System.out.println("paramName: " + paramName); // paramName: 變量1 15 16 String ruleRegex = matchString.replaceAll("(變量[0-9]{1,})", "(\\\\S*)"); 17 Pattern pattern = Pattern.compile(ruleRegex); 18 Matcher matcher = pattern.matcher(inputstr); 19 String paramValue = null; // 獲取變量值:23 20 if(matcher.find()) { 21 paramValue = matcher.group(1); 22 paramValue = paramValue.replace(",", ""); 23 } 24 System.out.println("paramValue: " + paramValue); // paramValue: 23 25 26 // 1、使用javascript引擎判斷是否滿足公式 27 ScriptEngineManager manager = new ScriptEngineManager(); 28 ScriptEngine engine = manager.getEngineByName("javascript"); 29 engine.put(paramName, paramValue); 30 31 boolean result = (Boolean) engine.eval(ruleString); 32 System.out.println("result: " + result); // result: false