import java.util.ArrayList;
import java.util.List;
public class MathString {
public static void main(String[] args){
String press = "12*12.22-7*(23.45-(-2))+(12-34)";
press = press.replaceAll("[\\[\\{]", "(").replaceAll("[\\]\\}]", ")");
System.out.println(parseString(press));
}
public static String parseString(String press){
int lasc = press.lastIndexOf("(");
if(lasc==-1){
return String.valueOf(addString(press));
}
String firstKHString = press.substring(0,lasc);
String lastFKHString = press.substring(lasc+1);
//System.out.println("firstKHString---"+firstKHString);
//System.out.println("lastFKHString---"+lastFKHString);
int firc = lastFKHString.indexOf(")");
lastFKHString = press.substring(firc+lasc+2);
//System.out.println("lastFKHString---"+lastFKHString);
String currentPress = press.substring(lasc+1,firc+lasc+1);
//System.out.println(currentPress);
return parseString(firstKHString+addString(currentPress)+lastFKHString);
}
public static double addString(String press){
//System.out.println(press);
press = repAddString(press);
press = repString(press);
//System.out.println(press);
String[] numbers = press.split("[\\+]");
double number = 0;
List<String> fhs = getFHAdd(press);
for(int i=0 ; i<numbers.length; i++ ){
String curNum = numbers[i];
//System.out.println(curNum);
if(curNum.equals("")){
curNum="0";
}
if(fhs.get(i).equals("+")){
number = number + mathString(curNum);
}else if(fhs.get(i).equals("-")){
number = number - mathString(curNum);
}
}
return number;
}
public static double mathString(String press){
/*int firstCH = press.indexOf("*");
int firstC = press.indexOf("/");
if(firstCH == -1 && firstC == -1){
return Double.parseDouble(press);
}
int firstindex = firstC < firstCH ? firstC : firstCH;
*/
press = repAddString(press);
String[] numbers = press.split("[\\*\\/]");
List<String> fhs = getFH(press);
double result = 1;
for(int i=0 ; i<numbers.length; i++){
if(fhs.get(i).equals("*")){
result = result * Double.parseDouble(numbers[i]);
}else if(fhs.get(i).equals("/")){
if(Double.parseDouble(numbers[i])==0){
throw new ArithmeticException("表达式中被除数有空值!");
}
result = result / Double.parseDouble(numbers[i]);
}
}
return result;
}
public static String repAddString(String press){
return press.replace("++", "+").replace("--", "+").replace("+-", "-").replace("-+", "-");
}
public static String repString(String press){
StringBuffer sb = new StringBuffer();
char ch = 0;
for(char c:press.toCharArray()){
if(c=='-'&&'/'!=ch&&'*'!=ch){
sb.append("+");
}
ch = c;
sb.append(c);
}
return sb.toString();
}
public static List<String> getFH(String press){
char[] chars = press.toCharArray();
List<String> fhs = new ArrayList<String>();
fhs.add("*");
for(char c : chars){
if(c=='*' || c=='/'){
fhs.add(String.valueOf(c));
}
}
return fhs;
}
public static List<String> getFHAdd(String press){
char[] chars = press.toCharArray();
List<String> fhs = new ArrayList<String>();
fhs.add("+");
for(char c : chars){
if(c=='+'){
fhs.add(String.valueOf(c));
}
}
return fhs;
}
}
分享到:
相关推荐
将近250行的算法 实现了通过字符串进行加减乘除四则运算 纯通过处理字符串和数组实现 希望能帮助大家: 例如:String input "33+26 77+70"; String result ""; try { result Account...
g.drawString("字符串s1的长度为:"+n1,5,70); g.drawString("字符串s2的前缀是否为we? "+s2.startsWith("we"),5,90); String s3[]={"door","apple","Applet","girl","boy"}; g.drawString("s3=door,apple,Applet,...
在Java编程中,字符串数组和大数据运算经常被用于复杂的数据处理和计算场景。在这个特定的示例中,我们要实现一个程序来计算表达式 (1+2)(1+2^2)*(1+2^3)*...*(1+2^100) 的结果。这个表达式涉及到指数运算和乘法,这...
本节将详细介绍十六进制字符串的按位异或运算以及如何在Java中实现这一运算。 十六进制字符串是由0到9和A到F(或a到f)组成的字符序列,每个字符代表4位二进制数。例如,十六进制数"AB"在二进制下表示为10101011。...
java 字符串转16进制 16进制转字符串 将两个ASCII字符合成一个字节; java 字符串转16进制 16进制转字符串 将两个ASCII字符合成一个字节; java 字符串转16进制 16进制转字符串 将两个ASCII字符合成一个字节; java ...
java 字符串工具类 java 字符串工具类java 字符串工具类 java 字符串工具类java 字符串工具类 java 字符串工具类java 字符串工具类 java 字符串工具类java 字符串工具类 java 字符串工具类java 字符串工具类 java ...
Java提供了多种库来解析和操作XML文档,其中JDOM(Java Document Object Model)是一个广泛使用的开源库,它提供了简单且强大的API来读取、创建和修改XML文档。 ### Java解析XML字符串 在给定的代码示例中,我们...
在Android平台上,开发一个能处理字符串运算的计算器是一项挑战性的任务。这个计算器应用程序允许用户输入一个完整的数学表达式,如 "2 + 3 * (4 - 5)",然后通过字符串解析和运算来得出结果。以下是一些关于实现...
这篇博客“Java实现计算字符串表达式”可能讲解了如何利用Java来处理这种问题,虽然具体的实现细节没有提供,但我们可以基于一般的方法和常用的库来探讨这个主题。 首先,计算字符串表达式的基本步骤通常包括以下几...
将`java.util.Date`类型的对象转换为字符串可以通过`SimpleDateFormat`类来实现。`SimpleDateFormat`是`java.text`包中的一个子类,它可以用来格式化和解析日期。下面是一个具体的例子: ```java import java.text....
在Java编程语言中,字符串处理是一项基础且重要的任务。标题提到的"Java检索字符串中是否存在某字符",实际上涉及到字符串的查找算法。这里主要讨论的是KMP(Knuth-Morris-Pratt)算法,这是一种高效的字符串匹配...
java压缩字符串
在Java开发中,将Java对象转换为JSON字符串或字符串数组是一项常见的任务,特别是在与前端交互、数据存储或者网络传输时。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也...
在Java编程语言中,处理字符串和正则表达式是一项常见的任务。正则表达式是一种强大的文本模式匹配工具,可以用于搜索、替换或者提取符合特定规则的字符串。在本篇文章中,我们将深入探讨如何利用Java中的Xeger和...
### Java中截取带汉字的字符串 在Java编程语言中,处理包含中文字符的字符串时,经常遇到的一个问题是如何正确地截取这些字符串。如果直接按照字节(byte)来进行分割,很容易导致中文字符被截断一半,从而形成乱码。...
在编程领域,实现一个计算器来处理字符串形式的运算表达式是一项常见的任务。这个“计算器(字符串运算)”项目旨在处理用户输入的复杂数学表达式,例如“-(1+(2-3)*4-(3+19)%3)/2”,并返回计算结果。这种...
在Java编程语言中,分解字符串是一项常见的任务,它涉及到对字符串进行分析,将字符串分割成多个子字符串。这个过程通常被称为字符串分割。在Java中,我们主要使用`String`类提供的`split()`方法来实现这一功能。...
在Java编程语言中,"移动字符串"通常指的是在程序中动态改变字符串的显示位置或实现某种形式的动画效果。这通常涉及到字符数组、字符串对象、图形用户界面(GUI)组件或者控制台输出等方面的知识。下面将详细介绍...
在提供的文件列表中,`Zifuchuan.java`可能是实现上述逻辑的源代码,而`www.pudn.com.txt`可能是一个包含测试数据的文本文件,用于测试字符串排序的程序。你可以打开这两个文件查看具体实现和数据内容。