[代码记录]java简单计算器的操作类函数封装
2014-12-28 16:26
387 查看
只是为了记录..
class Utils {
final static String FUNC = "sqrt|cos|sin|tan|sinh|tanh|cosh";
/*
* 验证表达式是否合法
*/
public static boolean sync_expression(String s) {
// 简单起见,此处尚未对表达式进行检验,请严格输入表达式;
return true;
}
/*
* 对表达式的三角函数进行处理
*/
public static String match_expression(String s) {
// String exp = "";
Pattern p = Pattern.compile("((" + FUNC + ")\\([^\\)]*\\))");
Matcher m = p.matcher(s);
java.util.List<String> result = new ArrayList<String>();
while (m.find()) {
result.add(m.group());
}
for (String s1 : result) {
String res = match_expression_2(s1);
System.out.println("match_expression:" + res);
if (res != null) {
if (s1.contains("cosh")) {
s = s.replace(
s1,
String.valueOf(Math.cosh(Double.parseDouble(res)
* Math.PI / 180)));
System.out.println(s);
} else if (s1.contains("cos")) {
s = s.replace(
s1,
String.valueOf(Math.cos(Double.parseDouble(res)
* Math.PI / 180)));
System.out.println(s);
}
if (s1.contains("sinh")) {
s = s.replace(
s1,
String.valueOf(Math.sinh(Double.parseDouble(res)
* Math.PI / 180)));
System.out.println(s);
} else if (s1.contains("sin")) {
s = s.replace(
s1,
String.valueOf(Math.sin(Double.parseDouble(res)
* Math.PI / 180)));
System.out.println(s);
}
if (s1.contains("tanh")) {
s = s.replace(
s1,
String.valueOf(Math.tanh(Double.parseDouble(res)
* Math.PI / 180)));
System.out.println(s);
} else if (s1.contains("tan")) {
s = s.replace(
s1,
String.valueOf(Math.tan(Double.parseDouble(res)
* Math.PI / 180)));
System.out.println(s);
}
if (s1.contains("sqrt")) {
s = s.replace(s1,
String.valueOf(Math.sqrt(Double.parseDouble(res))));
System.out.println(String.valueOf(Math.sqrt(Double
.parseDouble(res))));
}
}
}
return s;
}
// 弧度=角度乘以π后再除以180
// 角度=弧度除以π再乘以180
public static String match_expression_2(String s) {
Pattern p = Pattern.compile("(\\([^\\)]*\\))");
Matcher m = p.matcher(s);
java.util.List<String> result = new ArrayList<String>();
while (m.find()) {
result.add(m.group());
}
for (String s1 : result) {
System.out.println("match_expression_2:" + s1);
return express(s1);
}
return null;
}
public static void clearString(JTextField field) {
field.setText("");
}
/**
* 从光标添加一个字符
*
* @param field
* @param addstr
*/
public static void addString(JTextField field, String addstr) {
if (addstr.length() != 0) {
int position = field.getCaretPosition();
String text = field.getText();
text = text.substring(0, position) + addstr
+ text.substring(position, text.length());
field.setText(text);
field.setCaretPosition(text.length());
}
}
/**
* 从光标删除一个字符
*
* @param field
*/
public static void removeString(JTextField field) {
if (field.getText().toString().length() != 0) {
int position = field.getCaretPosition();
String text = field.getText();
text = text.substring(0, position - 1)
+ text.substring(position, text.length());
field.setText(text);
field.setCaretPosition(text.length());
}
}
/**
* 计算表达式
*
* @param express
* @return
*/
public static String express(String express) {
ScriptEngine engine = new ScriptEngineManager().getEngineByName("js");
try {
return engine.eval(express).toString();
} catch (ScriptException e) {
// 不对异常进行处理..
e.printStackTrace();
System.out.println(e.getMessage());
return "error";
}
}
}
class Utils {
final static String FUNC = "sqrt|cos|sin|tan|sinh|tanh|cosh";
/*
* 验证表达式是否合法
*/
public static boolean sync_expression(String s) {
// 简单起见,此处尚未对表达式进行检验,请严格输入表达式;
return true;
}
/*
* 对表达式的三角函数进行处理
*/
public static String match_expression(String s) {
// String exp = "";
Pattern p = Pattern.compile("((" + FUNC + ")\\([^\\)]*\\))");
Matcher m = p.matcher(s);
java.util.List<String> result = new ArrayList<String>();
while (m.find()) {
result.add(m.group());
}
for (String s1 : result) {
String res = match_expression_2(s1);
System.out.println("match_expression:" + res);
if (res != null) {
if (s1.contains("cosh")) {
s = s.replace(
s1,
String.valueOf(Math.cosh(Double.parseDouble(res)
* Math.PI / 180)));
System.out.println(s);
} else if (s1.contains("cos")) {
s = s.replace(
s1,
String.valueOf(Math.cos(Double.parseDouble(res)
* Math.PI / 180)));
System.out.println(s);
}
if (s1.contains("sinh")) {
s = s.replace(
s1,
String.valueOf(Math.sinh(Double.parseDouble(res)
* Math.PI / 180)));
System.out.println(s);
} else if (s1.contains("sin")) {
s = s.replace(
s1,
String.valueOf(Math.sin(Double.parseDouble(res)
* Math.PI / 180)));
System.out.println(s);
}
if (s1.contains("tanh")) {
s = s.replace(
s1,
String.valueOf(Math.tanh(Double.parseDouble(res)
* Math.PI / 180)));
System.out.println(s);
} else if (s1.contains("tan")) {
s = s.replace(
s1,
String.valueOf(Math.tan(Double.parseDouble(res)
* Math.PI / 180)));
System.out.println(s);
}
if (s1.contains("sqrt")) {
s = s.replace(s1,
String.valueOf(Math.sqrt(Double.parseDouble(res))));
System.out.println(String.valueOf(Math.sqrt(Double
.parseDouble(res))));
}
}
}
return s;
}
// 弧度=角度乘以π后再除以180
// 角度=弧度除以π再乘以180
public static String match_expression_2(String s) {
Pattern p = Pattern.compile("(\\([^\\)]*\\))");
Matcher m = p.matcher(s);
java.util.List<String> result = new ArrayList<String>();
while (m.find()) {
result.add(m.group());
}
for (String s1 : result) {
System.out.println("match_expression_2:" + s1);
return express(s1);
}
return null;
}
public static void clearString(JTextField field) {
field.setText("");
}
/**
* 从光标添加一个字符
*
* @param field
* @param addstr
*/
public static void addString(JTextField field, String addstr) {
if (addstr.length() != 0) {
int position = field.getCaretPosition();
String text = field.getText();
text = text.substring(0, position) + addstr
+ text.substring(position, text.length());
field.setText(text);
field.setCaretPosition(text.length());
}
}
/**
* 从光标删除一个字符
*
* @param field
*/
public static void removeString(JTextField field) {
if (field.getText().toString().length() != 0) {
int position = field.getCaretPosition();
String text = field.getText();
text = text.substring(0, position - 1)
+ text.substring(position, text.length());
field.setText(text);
field.setCaretPosition(text.length());
}
}
/**
* 计算表达式
*
* @param express
* @return
*/
public static String express(String express) {
ScriptEngine engine = new ScriptEngineManager().getEngineByName("js");
try {
return engine.eval(express).toString();
} catch (ScriptException e) {
// 不对异常进行处理..
e.printStackTrace();
System.out.println(e.getMessage());
return "error";
}
}
}
相关文章推荐
- Iconv是UNIX 95的iconv()函数的封装形式,它在各种字符代码体系间进行字符串转换。
- 封装了ORACLE函数的数据库操作类
- 在用java写代码时, 主函数前为什么要加static
- [代码重构]利用单一职责原则(SRP)封装函数
- java代码运行中获取正被调用的函数名
- java代码框架生成工具 开发记录2005-03-02
- 记录Java代码的执行时间
- js实现的日期操作类DateTime函数代码
- javascript实现的像java、c#之类的sleep暂停的函数代码
- [常用]非常有用的Java日期时间操作函数代码一览
- 收集了项目中常用的js函数和封装代码.
- java时间函数代码
- java函数代码
- java常用函数代码
- 封装一个PDO数据库操作类代码
- JAVA文件操作类和文件夹的操作代码示例
- 非常有用的Java日期时间操作函数代码一览
- java 封装日期操作类
- 分享一个记录当前代码信息的函数
- js实现的日期操作类DateTime函数代码