java - 更新输入后不存储来自 JTextArea 的预期字符串
问题描述
我在具有工作按钮的计算器中有一个内部类。我有一个JTextArea
按钮按下将注册一个数字 1-9,然后在选择操作后打印一个新行。选择操作后,我有一个布尔值,它将检查是否在再次打印之前计算结果。我试图拆分每个数字并使用以下方法存储它:
String s = textArea.getText();
String[] parts = s.split("\n|\\=|\\-|\\/|\\*|\\+");
虽然我期待类似的东西
100+
100=
200+
相反,我遇到了:
100+
100=
java.lang.NumberFormatException: empty String
为了进行这些计算,我使用了以下代码片段:
if(s.length() > 0){
if(calc == true){
textArea.setText(textArea.getText() + "=" + "\n");
d2 = Double.parseDouble(parts[counter]);
result = d1 + d2;
textArea.setText(textArea.getText() + result + buttonText + "\n");
d1 = d2;
}
if(Character.isDigit(s.charAt(s.length()-1)) && calc == false){
textArea.setText(textArea.getText() + buttonText + "\n");
d1 = Double.parseDouble(parts[counter]);
counter++;
calc = true;
}
}
有没有办法存储每次输入后要使用的数字而不会遇到此错误?
编辑:该行发生错误
Double.parseDouble(parts[counter]);
删除后不会导致错误,但仍可正常打印。通过使用 Double.parseDouble(parts[0]); 进行测试,我注意到了什么 它可以工作并从按钮返回第一个字符串输入,但似乎在此之后没有更多的值被存储到
String[] parts = s.split("\n|\\=|\\-|\\/|\\*|\\+");
数组,尽管附加输入满足分隔符要求,但它似乎停在那里。我想知道这是否是由于 split 方法没有向数组中添加额外输入的问题。
根据要求,我还在相关的地方发布了完整的代码
class operands implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
Object obj = event.getSource();
JButton but = null;
String buttonText = "";
//casts button with object
if(obj instanceof JButton)
{
but = (JButton) obj;
}
//sets string of text to button text
if(but != null)
{
buttonText = but.getText();
}
String s = textArea.getText();
//store numbers after each operand
String[] parts = s.split("\n|\\=|\\-|\\/|\\*|\\+");
if(s.length() > 0)
{
if(calc)
{
//performs calculation and returns result
textArea.setText(textArea.getText() + "=" + "\n");
d2 = Double.parseDouble(parts[counter]);
result = d1 + d2;
textArea.setText(textArea.getText() + result + buttonText + "\n");
d1 = d2;
}
if(Character.isDigit(s.charAt(s.length()-1)) && !calc)
{
//updates function to perform calculation on next operand
textArea.setText(textArea.getText() + buttonText + "\n");
d1 = Double.parseDouble(parts[counter]);
counter++;
calc = true;
}
}
}
解决方案
感谢所有试图提供帮助的人。我发现了这个问题。
对于字符串 .split() 函数,我将 "\n" 作为分隔符之一。这样做似乎在将数字存储到字符串中存在问题,因此会将空结果存储到数组中。从分隔符中删除换行符似乎解决了这个问题。
推荐阅读
- c# - 命名空间“System.Configuration”中不存在类型或命名空间名称“UserScopedSettingAttributeAttribute”
- laravel - 需要一个 .htacces 条件来删除 index.php
- python - Pygame 函数有两个括号
- azure - 使用 chrome-launcher npm 包时出现 ChromeNotInstalledError
- bash - 根据 Bash 中的模式更改目录名称
- javascript - 如何使用javascript在模式弹出窗口中显示用户输入值
- mongodb - 解析服务器保存照片错误可重试写入不可用
- python-3.x - 如何为openx koa 版本安装Figures Plugin
- r - 努力在 r 闪亮的应用程序中获得输出
- javascript - Codeigniter 4 Ajax在更新数据时返回303