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中实现这一运算。 十六进制字符串是由0到9和A到F(或a到f)组成的字符序列,每个字符代表4位二进制数。例如,十六进制数"AB"在二进制下表示为10101011。...
本篇文章将深入探讨如何从字符串中提取括号内的内容,主要关注于基础的字符串操作、正则表达式以及如何利用这些工具来实现目标。 首先,我们要明白Java中的字符串是`String`类的对象,它提供了丰富的API用于字符串...
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中的Xeger和...
可支持浮点数与负数的字符串运算代码,可做收藏、学习、研究。
### Java中截取带汉字的字符串 在Java编程语言中,处理包含中文字符的字符串时,经常遇到的一个问题是如何正确地截取这些字符串。如果直接按照字节(byte)来进行分割,很容易导致中文字符被截断一半,从而形成乱码。...
在Java编程语言中,分解字符串是一项常见的任务,它涉及到对字符串进行分析,将字符串分割成多个子字符串。这个过程通常被称为字符串分割。在Java中,我们主要使用`String`类提供的`split()`方法来实现这一功能。...
它通过查找输入字符串中的最长匹配前缀来构建一个新的编码,从而实现数据的压缩。这种算法的主要思想是创建一个动态更新的字典,字典中的条目是输入字符串中的已编码子串。 在Java环境中实现LZ78算法,首先我们需要...
在Java编程语言中,字符串是极其重要的数据类型,用于存储和操作文本信息。字符串的长度判断和截取是常见的操作,对于程序逻辑控制和数据处理至关重要。以下将详细讲解如何在Java中进行字符串长度的判断以及如何截取...
本文将基于标题和描述所提需求,详细探讨Java环境下实现字符串截取的方法以及相关知识点。 首先,要理解Java中字符串(String)和字节(byte)的区别。在Java中,字符串是一种对象类型,用于表示文本。而字节则是...
在本例中,我们将学习如何使用 Java 实现字符串分割功能,包括将输入字符串分割成 10 个字符一组的数组,并将其倒序输出。 知识点一:字符串分割的基本概念 字符串分割是指将一个给定的字符串按照一定的规则分割成...