我正在创建一个简单的程序,它从JTextArea的输入中获取2个特定字符串。它需要找到一个非整数字符串然后找到一个整数。从同一个非整数字符串匹配的所有值都将添加并在JTextField中显示结果。如下例所示,匹配“ax”的所有数字将被加在一起,最终结果将显示在标签“ AX Box ”(25 + 5 = 30)下面的texfield中
我的以下代码:
JTextField ax, bx, cx, dx;
int totalAX, totalBX, totalCX, totalDX;
String[] lines = textArea.getText().split("\\n"); // split lines
System.out.println(Arrays.toString(lines)); // convert each line to string
for (int i = 0; i < lines.length; i++) {
if (lines.contains("ax") {
// add each numbers.
// for example, 25 + 5
totalAX = totalAX + i;
ax.setText("Total: " +totalAX);
}
}
我的问题是程序找不到子串“ax”,“bx”等等。这方面最好的方法是什么?我得到的错误如下:
线程中的异常“AWT-EventQueue-0”java.lang.NumberFormatException:对于输入字符串:“ax”
答案 0 :(得分:1)
我不确定您是否实际拆分数组,行跳转的转义序列为\n
,您将其设为\\n
。
如果你需要将数组转换为String,你也只打印数组lines
,你应该为它重新分配一个值,如:
for (int i = 0; i < lines.length; i++) {
String line = lines[i].toString();
而且我非常确定你不需要toString()
,因为它应该来自textBox
在此之后你需要找到它是否包含&#34; ax&#34;并且它首先被包含的索引,保留该数字并使用它来对整行进行子串以查找数字,因此请记住该数字应该在字符串的最后位置,您将在此处查看类似的内容(内部)循环:
if (line.contains("ax") {
int theIndex = line.indexOf("ax");
line = line.substring(theIndex);
}
或者在oneliner:
if (line.contains("ax") {
line = line.substring(line.indexOf("ax"));
}
答案 1 :(得分:1)
我使用regex
从与您的文字匹配的行中提取数字。
Pattern pattern = Pattern.compile("[0-9]+");
Matcher m;
System.out.println(Arrays.toString(lines));
for (int i = 0; i < lines.length; i++) {
if (lines[i].contains("ax")) {
m = pattern.matcher(lines[i]);
if (m.find()) {
totalAX += Integer.parseInt(m.group());
}
}
}
ax.setText("Total: " +totalAX); //put this line outside of the loop so that it will show the totalAX after all numbers have been read.