gpt4 book ai didi

java - 数字格式异常和正则查询

转载 作者:行者123 更新时间:2023-12-01 11:35:30 24 4
gpt4 key购买 nike

我试图从用户那里获取数学表达式,但我不断收到数字格式异常:

Exception in thread "JavaFX Application Thread" java.lang.NumberFormatException: For input string: "(13-1)*(12-10)"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:569)
at java.lang.Integer.valueOf(Integer.java:766)
at Main.lambda$start$2(Main.java:134)
at Main$$Lambda$73/16094097.handle(Unknown Source)

这是我的事件处理程序,我用它来计算输入的表达式。文本字段应该接受 4 个数字 (1-13) 的表达式,并评估它是否等于 24。我正在使用正则表达式,但它似乎不起作用。另外,我有一个字符数组,最初仅用于符号,但这似乎没有必要。我对正则表达式非常陌生,并且已经尝试了多种组合。

btVerify.setOnAction(
(ActionEvent e) ->
{
LinkedList<Character> expInput = new LinkedList<Character>();
for(char c: tfExpress.getText().toCharArray()){
expInput.add(c);
}
String[] inputIntegers = tfExpress.getText().split("[^0-9]+-/*()");

expInput.removeIf(p-> p.equals(signs));

ArrayList<Integer> temp = new ArrayList<>();
for(String s:inputIntegers)
{
temp.add(new Integer(Integer.valueOf(s)));
}
temp.remove(new Integer(card1.CardValue()));
temp.remove(new Integer(card2.CardValue()));
temp.remove(new Integer(card3.CardValue()));
temp.remove(new Integer(card4.CardValue()));


if(temp.isEmpty()&& expInput.isEmpty())
{
if(express == 24){
display.setText("Correct");
}
else
display.setText("Incorrect");

}
else
display.setText("The numbers in the expression don't "
+ "match the numbers in the set.");
});

最佳答案

NumberFormat 异常 是因为您的正则表达式没有将数字与符号/文字分开。

tfExpress.getText().split("[^0-9]+-/*()"); 

返回整个文本,即(13-1)*(12-10)

您需要一个更复杂的正则表达式来将符号与数字分开。感谢@unihedron用于正则表达式。

\b|(?<=[()])(?=[^\d()])|(?<=[^\d()])(?=[()])

现在您可以使用

...
String regex = "\b|(?<=[()])(?=[^\d()])|(?<=[^\d()])(?=[()])";
tfExpress.getText().split(regex);
...

一个非常简单的工作示例可以是 found here .

关于java - 数字格式异常和正则查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30031094/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com