文章图片标题

微信公众号实现-实现简单的四则运算让公众号支持算术

分类:企业级Java 作者:为者常成 评论:0 点击: 409 次 日期:2016-07-08


对四则运算使用正则表达式匹配,然后进行计算的过程:

/**
* 计算处理
* @param keyword
* @param fromUsername
* @param toUsername
* @param time
* @param splitWord
* @return
*/
private String mathHandle(String keyword,String fromUsername, String toUsername, String time){
/* 只是为了苦逼地验证是否数学表达式 */
String answer = keyword.replaceAll(" ", "").toLowerCase().replaceAll("x", "*").replaceAll("\\?", "");
boolean isValid = false;// 有效表达式

Matcher matcher = null;
if (!answer.endsWith("*") && !answer.endsWith("+")){
Pattern pattern=Pattern.compile("^(\\(?[-+*x/%^&|~]?(>>>)?(>>)?(<<)?\\(?\\d+(\\.\\d+)?\\)?)+(.+)?$$");
matcher=pattern.matcher(answer);

if (matcher.find()){
String temp = matcher.group(matcher.groupCount());
answer = temp != null ? RegExMatcher.regexReplace(answer, temp, "") : answer;

pattern = Pattern.compile("[-+]?\\d+(\\.\\d+)?");
isValid = !pattern.matcher(answer).matches();// 不是纯数字,为有效
}
}

if (isValid){
Double d = Calculate.caculate(answer);
if (d != null){
String[] ans = {"这还用算?我一看就是:","眉头一皱,答案是:","张口就来:","简单^^,等于","so easy! 结果是:"};
answer = ans[new Random().nextInt(ans.length)] + Double.toString(d);
}else
answer = "天啊噜,不认识这个算式,教教我!";
}else
return null; // 返回null退出当前模式

// 记录聊天日志
ChatLog.logRecord(new Object[]{fromUsername,"",toUsername,keyword,answer});

return this.handleMsgText(answer, fromUsername, toUsername, time, WeiXinHandler.msgTypeText);
}




声明: 除非注明,本文属( 为者常成 )原创,转载请保留链接: http://www.tomrrow.com/archives-7478.html