将字符串中的连续数字值转换为数字格式
Converting consecutive digit values in String to Numberic format
我正在开发计算器应用程序。
我有 Class CalcLogic,它处理 App
:
中的所有逻辑
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);
}
}
得到了MainApp
:
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
的数字:
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
因为它将每个元素从 String
中分离出来。
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]);
}
有关如何使用 java 拆分数学表达式的解决方案,请查看此 Whosebug 条目: 即:
String[] arr = str.split("(?<=\d)(?=\D)|(?<=\D)(?=\d)");
有关 split("(?<=\d)(?=\D)|(?<=\D)(?=\d)")
的详细信息,请阅读 Whosebug 条目:
祝你好运。
我正在开发计算器应用程序。
我有 Class CalcLogic,它处理 App
:
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);
}
}
得到了MainApp
:
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
的数字:
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
因为它将每个元素从 String
中分离出来。
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]);
}
有关如何使用 java 拆分数学表达式的解决方案,请查看此 Whosebug 条目:
String[] arr = str.split("(?<=\d)(?=\D)|(?<=\D)(?=\d)");
有关 split("(?<=\d)(?=\D)|(?<=\D)(?=\d)")
的详细信息,请阅读 Whosebug 条目:
祝你好运。