如何分离变量和运算符? 类似下面的四则运算式子String formula = "(1112 + 2134)*4265-436436";如何将1112, 2134,4265, 436436从中分离出来?请高手指点! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 最后输出的就是分离后的数据import java.util.*;;public class Test { public static void main(String[] args) { String formula = "(1112 + 2134)*4265-436436"; ArrayList<String> str=new ArrayList<String>(); String string=""; int h=0; for(int i=0;i<formula.length();i++) { if(formula.charAt(i)<='9'&&formula.charAt(i)>='0') { string=string+formula.charAt(i); h=1; } else { if(h==1) { str.add(string); } string=""; h++; } } if(h==1) { str.add(string); } for(int i=0;i<str.size();i++) System.out.println(str.get(i)); }} String formula = "(1112 + 2134)*4265-436436"; StringBuilder sb = new StringBuilder();for (int i=0; i<formula.length(); i++) { char c = formula.charAt(i); if (c < '0' || c > '9') { if (sb.charAt(sb.length()-1) != ',') { sb.append(","); } } else { sb.append(c); }}String[] rst = sb.toString().split(",");System.out.println(Arrays.toString(rst)); 同意ls的String formula = "(1112 + 2134)*4265-436436"; StringBuilder sb = new StringBuilder(); for (int i=0; i <formula.length(); i++) { char c = formula.charAt(i); if (c < '0 ' ¦ ¦ c > '9 ') { if (sb.charAt(sb.length()-1) != ', ') { sb.append(","); } } else { sb.append(c); } } String[] rst = sb.toString().split(","); System.out.println(Arrays.toString(rst)); public static void main(String[] args) { String str = "(1112 + 2134)*4265-436436"; Pattern pat = Pattern.compile("\\D{1,}"); String[] strArr = pat.split(str); for(int i=0;i<strArr.length;i++){ if(!"".equals(strArr[i])) System.out.println(strArr[i]); } } 哥们,你要做的就是解析一个数学算术试的问题吧解析出来并不难,有很多方法,他的计算才是一个经典的编程问题,既计算器的实现我先说如何解析吧以上各位给的各种解析,都可以实现,但是对于这种方面的解析,在java中一般是用正则表达式来实现的例如:import java.util.LinkedList;public class StringSplit { public static void main(String[] args) { String s = "123+23+45"; //取到输入的算术式 //解析算术式,把分别把数字,运算符放入number,和op中 LinkedList<String> number = new LinkedList<String>(); LinkedList<String> op = new LinkedList<String>(); for (String n : s.split("\\W")) { number.add(n); } System.out.println("计算之前 number:" + number + " 个数 :" + number.size()); for (String o : s.split("\\w+")) { op.add(o); } System.out.println("计算之前 op:" + op + " 个数 :" + op.size()); }}//output:计算之前 number:[123, 23, 45] 个数 :3计算之前 op:[, +, +] 个数 :3这样解析出来要注意的是:op中第一个是“”,计算时需要移除!关于他的具体计算,最经典的计算是用栈来实现,网上资料很多,自己去找个看我下面用一个另外的方法实现:import java.util.Iterator;import java.util.LinkedList;public class StringSplit { public static void main(String[] args) { String s = "1*2*4+4+5+6-7*2*9/2+9"; System.out.println("要计算的算术式:" + s); //解析算术式,把分别把数字,运算符放入number,和op中 LinkedList<String> number = new LinkedList<String>(); LinkedList<String> op = new LinkedList<String>(); for (String n : s.split("\\W")) { number.add(n); } System.out.println("计算之前 number:" + number + " 个数 :" + number.size()); for (String o : s.split("\\w+")) { op.add(o); } System.out.println("计算之前 op:" + op + " 个数 :" + op.size()); op.remove(0); // 第1个元素为"",移除 //先计算*,/运算,并把计算过的数和运算符设置为字符串null,对于数的设置把左操作数 //置字符串null,右操作数置为2数运算的结果 for (int i = 0; i < number.size() - 1; i++) { String p = op.get(i); if (p.equals("*")) { int n = Integer.parseInt(number.get(i)) * Integer.parseInt(number.get(i + 1)); number.set(i, "null"); number.set(i + 1, n + ""); op.set(i, "null"); } else if (p.equals("/")) { int n = Integer.parseInt(number.get(i)) / Integer.parseInt(number.get(i + 1)); number.set(i, "null"); number.set(i + 1, n + ""); op.set(i, "null"); } }// System.out.println("乘除运算完毕!"); //将number,op中置null的删除 for (Iterator<String> it = number.iterator(); it.hasNext();) { if (it.next().equals("null")) { it.remove(); } }// System.out.println("进行乘除计算后剩余的计算数: number:" + number + "个数:"// + number.size()); for (Iterator<String> it = op.iterator(); it.hasNext();) { if (it.next().equals("null")) { it.remove(); } } //进行+,-运算 boolean flag = true; while (flag) { //运算过的置null字符串 for (int i = 0; i < number.size() - 1; i++) { String p = op.get(i); if (p.equals("+")) { int n = Integer.parseInt(number.get(i)) + Integer.parseInt(number.get(i + 1)); number.set(i, "null"); number.set(i + 1, n + ""); op.set(i, "null"); } else if (p.equals("-")) { int n = Integer.parseInt(number.get(i)) - Integer.parseInt(number.get(i + 1)); number.set(i, "null"); number.set(i + 1, n + ""); op.set(i, "null"); } else { continue; } } //将置null的删除 for (Iterator<String> it = number.iterator(); it.hasNext();) { if (it.next().equals("null")) { it.remove(); } } for (Iterator<String> it = op.iterator(); it.hasNext();) { if (it.next().equals("null")) { it.remove(); } } //判断如果op中没有元素,将算术式也运算完毕 if (op.size() == 0) { flag = false; break; } } String result = number.get(0); System.out.println("result = " + result); }}//output:要计算的算术式:1*2*4+4+5+6-7*2*9/2+9计算之前 number:[1, 2, 4, 4, 5, 6, 7, 2, 9, 2, 9] 个数 :11计算之前 op:[, *, *, +, +, +, -, *, *, /, +] 个数 :11result = -31 继续发题玩 JAVA如何实现音频的对比 tomcat启动异常 下午三点班面试 希望高手帮助一下。着急。 字符串长度的问题 一个jdbc巨郁闷的问题 小弟初学JAVA,请各位大哥哥大姐姐开出一个书单,循序渐进的学习,小弟先谢拉! 为什么我每次socket.close();都会挑异常?? 一个很简单的菜鸟问题。顺序问题 如何在BorderLayout中EAST,WEST等的宽度可以改吗?如何改?高手指点 关于基于servlets/JSP的在线纸牌游戏,困扰好久,请各位高手提供个思路 一个二维数组的算法问题
public class Test {
public static void main(String[] args) {
String formula = "(1112 + 2134)*4265-436436";
ArrayList<String> str=new ArrayList<String>();
String string="";
int h=0;
for(int i=0;i<formula.length();i++)
{
if(formula.charAt(i)<='9'&&formula.charAt(i)>='0')
{
string=string+formula.charAt(i);
h=1;
}
else
{
if(h==1)
{
str.add(string);
}
string="";
h++;
}
}
if(h==1)
{
str.add(string);
}
for(int i=0;i<str.size();i++)
System.out.println(str.get(i));
}
}
StringBuilder sb = new StringBuilder();
for (int i=0; i<formula.length(); i++) {
char c = formula.charAt(i);
if (c < '0' || c > '9') {
if (sb.charAt(sb.length()-1) != ',') {
sb.append(",");
}
} else {
sb.append(c);
}
}
String[] rst = sb.toString().split(",");
System.out.println(Arrays.toString(rst));
StringBuilder sb = new StringBuilder();
for (int i=0; i <formula.length(); i++) {
char c = formula.charAt(i);
if (c < '0 ' ¦ ¦ c > '9 ') {
if (sb.charAt(sb.length()-1) != ', ') {
sb.append(",");
}
} else {
sb.append(c);
}
}
String[] rst = sb.toString().split(",");
System.out.println(Arrays.toString(rst));
Pattern pat = Pattern.compile("\\D{1,}");
String[] strArr = pat.split(str);
for(int i=0;i<strArr.length;i++){
if(!"".equals(strArr[i]))
System.out.println(strArr[i]);
}
}
我先说如何解析吧
以上各位给的各种解析,都可以实现,但是对于这种方面的解析,在java中一般是用正则表达式来实现的
例如:
import java.util.LinkedList;public class StringSplit { public static void main(String[] args) {
String s = "123+23+45";
//取到输入的算术式
//解析算术式,把分别把数字,运算符放入number,和op中
LinkedList<String> number = new LinkedList<String>();
LinkedList<String> op = new LinkedList<String>();
for (String n : s.split("\\W")) {
number.add(n);
}
System.out.println("计算之前 number:" + number + " 个数 :"
+ number.size());
for (String o : s.split("\\w+")) {
op.add(o);
}
System.out.println("计算之前 op:" + op + " 个数 :"
+ op.size());
}}//output:计算之前 number:[123, 23, 45] 个数 :3
计算之前 op:[, +, +] 个数 :3
这样解析出来要注意的是:op中第一个是“”,计算时需要移除!
关于他的具体计算,最经典的计算是用栈来实现,网上资料很多,自己去找个看
我下面用一个另外的方法实现:
import java.util.Iterator;
import java.util.LinkedList;public class StringSplit { public static void main(String[] args) {
String s = "1*2*4+4+5+6-7*2*9/2+9";
System.out.println("要计算的算术式:" + s);
//解析算术式,把分别把数字,运算符放入number,和op中
LinkedList<String> number = new LinkedList<String>();
LinkedList<String> op = new LinkedList<String>();
for (String n : s.split("\\W")) {
number.add(n);
}
System.out.println("计算之前 number:" + number + " 个数 :"
+ number.size());
for (String o : s.split("\\w+")) {
op.add(o);
}
System.out.println("计算之前 op:" + op + " 个数 :"
+ op.size());
op.remove(0); // 第1个元素为"",移除 //先计算*,/运算,并把计算过的数和运算符设置为字符串null,对于数的设置把左操作数
//置字符串null,右操作数置为2数运算的结果
for (int i = 0; i < number.size() - 1; i++) {
String p = op.get(i);
if (p.equals("*")) {
int n = Integer.parseInt(number.get(i))
* Integer.parseInt(number.get(i + 1));
number.set(i, "null");
number.set(i + 1, n + "");
op.set(i, "null");
} else if (p.equals("/")) {
int n = Integer.parseInt(number.get(i))
/ Integer.parseInt(number.get(i + 1));
number.set(i, "null");
number.set(i + 1, n + "");
op.set(i, "null");
}
}
// System.out.println("乘除运算完毕!");
//将number,op中置null的删除
for (Iterator<String> it = number.iterator(); it.hasNext();) {
if (it.next().equals("null")) {
it.remove();
}
}// System.out.println("进行乘除计算后剩余的计算数: number:" + number + "个数:"
// + number.size());
for (Iterator<String> it = op.iterator(); it.hasNext();) {
if (it.next().equals("null")) {
it.remove();
}
}
//进行+,-运算
boolean flag = true;
while (flag) {
//运算过的置null字符串
for (int i = 0; i < number.size() - 1; i++) {
String p = op.get(i);
if (p.equals("+")) {
int n = Integer.parseInt(number.get(i))
+ Integer.parseInt(number.get(i + 1));
number.set(i, "null");
number.set(i + 1, n + "");
op.set(i, "null");
} else if (p.equals("-")) {
int n = Integer.parseInt(number.get(i))
- Integer.parseInt(number.get(i + 1));
number.set(i, "null");
number.set(i + 1, n + "");
op.set(i, "null");
} else {
continue;
}
}
//将置null的删除
for (Iterator<String> it = number.iterator(); it.hasNext();) {
if (it.next().equals("null")) {
it.remove();
}
} for (Iterator<String> it = op.iterator(); it.hasNext();) {
if (it.next().equals("null")) {
it.remove();
}
}
//判断如果op中没有元素,将算术式也运算完毕
if (op.size() == 0) {
flag = false;
break;
}
}
String result = number.get(0);
System.out.println("result = " + result);
}}
//output:
要计算的算术式:1*2*4+4+5+6-7*2*9/2+9
计算之前 number:[1, 2, 4, 4, 5, 6, 7, 2, 9, 2, 9] 个数 :11
计算之前 op:[, *, *, +, +, +, -, *, *, /, +] 个数 :11
result = -31