`
wangquanli8
  • 浏览: 10097 次
  • 性别: Icon_minigender_1
  • 来自: galaxy
文章分类
社区版块
存档分类
最新评论

字符串运算java简单实现,没有优化,没有大批量的测试。

阅读更多
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;
	}
	
}
1
2
分享到:
评论

相关推荐

    java中字符串运算

    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位异或运算

    本节将详细介绍十六进制字符串的按位异或运算以及如何在Java中实现这一运算。 十六进制字符串是由0到9和A到F(或a到f)组成的字符序列,每个字符代表4位二进制数。例如,十六进制数"AB"在二进制下表示为10101011。...

    java字符串处理取出括号内的字符串

    本篇文章将深入探讨如何从字符串中提取括号内的内容,主要关注于基础的字符串操作、正则表达式以及如何利用这些工具来实现目标。 首先,我们要明白Java中的字符串是`String`类的对象,它提供了丰富的API用于字符串...

    java 字符串转16进制 16进制转字符串 将两个ASCII字符合成一个字节;

    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 字符串工具类 java ...

    java解析xml字符串

    Java提供了多种库来解析和操作XML文档,其中JDOM(Java Document Object Model)是一个广泛使用的开源库,它提供了简单且强大的API来读取、创建和修改XML文档。 ### Java解析XML字符串 在给定的代码示例中,我们...

    Android字符串运算的计算器

    在Android平台上,开发一个能处理字符串运算的计算器是一项挑战性的任务。这个计算器应用程序允许用户输入一个完整的数学表达式,如 "2 + 3 * (4 - 5)",然后通过字符串解析和运算来得出结果。以下是一些关于实现...

    Java实现计算字符串表达式

    这篇博客“Java实现计算字符串表达式”可能讲解了如何利用Java来处理这种问题,虽然具体的实现细节没有提供,但我们可以基于一般的方法和常用的库来探讨这个主题。 首先,计算字符串表达式的基本步骤通常包括以下几...

    JAVA日期与字符串的转换

    将`java.util.Date`类型的对象转换为字符串可以通过`SimpleDateFormat`类来实现。`SimpleDateFormat`是`java.text`包中的一个子类,它可以用来格式化和解析日期。下面是一个具体的例子: ```java import java.text....

    Java检索字符串中是否存在某字符

    在Java编程语言中,字符串处理是一项基础且重要的任务。标题提到的"Java检索字符串中是否存在某字符",实际上涉及到字符串的查找算法。这里主要讨论的是KMP(Knuth-Morris-Pratt)算法,这是一种高效的字符串匹配...

    java压缩字符串

    java压缩字符串

    Java根据正则表达式生成字符串—Xeger,automaton

    在Java编程语言中,处理字符串和正则表达式是一项常见的任务。正则表达式是一种强大的文本模式匹配工具,可以用于搜索、替换或者提取符合特定规则的字符串。在本篇文章中,我们将深入探讨如何利用Java中的Xeger和...

    支持浮点数运算的字符串运算

    可支持浮点数与负数的字符串运算代码,可做收藏、学习、研究。

    java中截取带汉字的字符串

    ### Java中截取带汉字的字符串 在Java编程语言中,处理包含中文字符的字符串时,经常遇到的一个问题是如何正确地截取这些字符串。如果直接按照字节(byte)来进行分割,很容易导致中文字符被截断一半,从而形成乱码。...

    java 分解字符串

    在Java编程语言中,分解字符串是一项常见的任务,它涉及到对字符串进行分析,将字符串分割成多个子字符串。这个过程通常被称为字符串分割。在Java中,我们主要使用`String`类提供的`split()`方法来实现这一功能。...

    LZ78算法实现对任意字符串的压缩与解压

    它通过查找输入字符串中的最长匹配前缀来构建一个新的编码,从而实现数据的压缩。这种算法的主要思想是创建一个动态更新的字典,字典中的条目是输入字符串中的已编码子串。 在Java环境中实现LZ78算法,首先我们需要...

    字符串长度的判断 JAVA

    在Java编程语言中,字符串是极其重要的数据类型,用于存储和操作文本信息。字符串的长度判断和截取是常见的操作,对于程序逻辑控制和数据处理至关重要。以下将详细讲解如何在Java中进行字符串长度的判断以及如何截取...

    截取如下字符串“java程序教程”的前5个字节,字符串应该为“java程”,截取前6个字符,字符串也应该为“java程”,程序实现之.

    本文将基于标题和描述所提需求,详细探讨Java环境下实现字符串截取的方法以及相关知识点。 首先,要理解Java中字符串(String)和字节(byte)的区别。在Java中,字符串是一种对象类型,用于表示文本。而字节则是...

    java 字符串分割

    在本例中,我们将学习如何使用 Java 实现字符串分割功能,包括将输入字符串分割成 10 个字符一组的数组,并将其倒序输出。 知识点一:字符串分割的基本概念 字符串分割是指将一个给定的字符串按照一定的规则分割成...

Global site tag (gtag.js) - Google Analytics