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;
}
}
分享到:
相关推荐
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 字符串转16进制 16进制转字符串 将两个ASCII字符合成一个字节; java 字符串转16进制 16进制转字符串 将两个ASCII字符合成一个字节; java 字符串转16进制 16进制转字符串 将两个ASCII字符合成一个字节; java ...
本篇文章将深入探讨如何从字符串中提取括号内的内容,主要关注于基础的字符串操作、正则表达式以及如何利用这些工具来实现目标。 首先,我们要明白Java中的字符串是`String`类的对象,它提供了丰富的API用于字符串...
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的字符串拼接的性能,原文中的测试代码在功能上并不等价,导致concat的测试意义不大。不过原作者在评论栏给了新的concat结果,如果有兴趣的同学建议自己修改代码测试。 在JAVA中拼接两个...
在Java编程语言中,处理字符串和正则表达式是一项常见的任务。正则表达式是一种强大的文本模式匹配工具,可以用于搜索、替换或者提取符合特定规则的字符串。在本篇文章中,我们将深入探讨如何利用Java中的Xeger和...
本文将围绕“java字符串练习”这一主题,深入探讨如何解析字符串、逆序输出字符串以及处理特定格式的字符串数据。 首先,我们要讨论的是字符串解析。在Java中,我们可以使用`String`类提供的方法或正则表达式来实现...
### Java中截取带汉字的字符串 在Java编程语言中,处理包含中文字符的字符串时,经常遇到的一个问题是如何正确地截取这些字符串。如果直接按照字节(byte)来进行分割,很容易导致中文字符被截断一半,从而形成乱码。...
在编程领域,实现一个计算器来处理字符串形式的运算表达式是一项常见的任务。这个“计算器(字符串运算)”项目旨在处理用户输入的复杂数学表达式,例如“-(1+(2-3)*4-(3+19)%3)/2”,并返回计算结果。这种...
在Java编程语言中,分解字符串是一项常见的任务,它涉及到对字符串进行分析,将字符串分割成多个子字符串。这个过程通常被称为字符串分割。在Java中,我们主要使用`String`类提供的`split()`方法来实现这一功能。...
在Java编程语言中,"移动字符串"通常指的是在程序中动态改变字符串的显示位置或实现某种形式的动画效果。这通常涉及到字符数组、字符串对象、图形用户界面(GUI)组件或者控制台输出等方面的知识。下面将详细介绍...
在提供的文件列表中,`Zifuchuan.java`可能是实现上述逻辑的源代码,而`www.pudn.com.txt`可能是一个包含测试数据的文本文件,用于测试字符串排序的程序。你可以打开这两个文件查看具体实现和数据内容。
在Java编程语言中,字符串是极其重要的数据类型,用于存储和操作文本信息。字符串的长度判断和截取是常见的操作,对于程序逻辑控制和数据处理至关重要。以下将详细讲解如何在Java中进行字符串长度的判断以及如何截取...