Java 将字符串中的连续数字值转换为数字格式
我正在研究计算器应用程序 我有CalcLogic类,它处理Java 将字符串中的连续数字值转换为数字格式,java,string,stack,Java,String,Stack,我正在研究计算器应用程序 我有CalcLogic类,它处理应用程序中的所有逻辑: public class CalcLogic { private CharacterStack characterStack; private DigitStack digitStack; private StringStack stringStack; public CalcLogic() { characterStack = new CharacterSta
应用程序中的所有逻辑:
public class CalcLogic {
private CharacterStack characterStack;
private DigitStack digitStack;
private StringStack stringStack;
public CalcLogic() {
characterStack = new CharacterStack();
digitStack = new DigitStack();
stringStack = new StringStack();
}
public void convertString(String s) {
String[] arr = s.split("");
for (int i = 0; i < arr.length; i++) {
stringStack.push(arr[i]);
}
while (!stringStack.isEmpty()) {
if ((!stringStack.isEmpty()) && stringStack.peek().matches("[0-9]+")) {
digitStack.push(Double.valueOf(stringStack.pop()));
}
if ((!stringStack.isEmpty()) && stringStack.peek().matches("[(+=\\-*/^)]+")) {
characterStack.push(stringStack.pop());
}
}
System.out.println(digitStack);
System.out.println(characterStack);
}
}
public static void main(String[] args) {
CalcLogic calcLogic = new CalcLogic();
calcLogic.convertString(new String("1+2*(3+4/2-(1+2))*2+1"));
}
}
转换数字时出现问题:
if ((!stringStack.isEmpty()) && stringStack.peek().matches("[0-9]+")) {
digitStack.push(Double.valueOf(stringStack.pop()));
}
字符串中的数字
:
String s = "1+2*3(30+4/2-(10+2))*2+1";
将按如下方式推入digitStack
:
1.0 2.0 2.0 1.0 2.0 4.0 [0.0 3.0] 2.0 1.0
因为它将字符串中的每个元素转换为单独的
digitStack
中的预期输出应为:
1.0 2.0 2.0 1.0 2.0 4.0 30.0 2.0 1.0
如何实现它?问题来自String[]arr=str.split(“”)代码>它按字符分割。
您可以使用此代码进行检查
String str = "1+2*(3+4/2-(1+2))*2+1";
String[] arr = str.split("");
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
String str=“1+2*(3+4/2-(1+2))*2+1”;
字符串[]arr=str.split(“”);
对于(int i=0;i
有关如何使用java拆分数学表达式的解决方案,请查看以下stackoverflow条目:,即:
String[] arr = str.split("(?<=\\d)(?=\\D)|(?<=\\D)(?=\\d)");
String[]arr=str.split(“(?问题源于String[]arr=str.split(”);
它将字符逐个拆分