Java - 在JTextArea

时间:2017-02-18 14:24:35

标签: java arrays string jtextfield jtextarea

我正在创建一个简单的程序,它从JTextArea的输入中获取2个特定字符串。它需要找到一个非整数字符串然后找到一个整数。从同一个非整数字符串匹配的所有值都将添加并在JTextField中显示结果。如下例所示,匹配“ax”的所有数字将被加在一起,最终结果将显示在标签“ AX Box ”(25 + 5 = 30)下面的texfield中

screenshot

我的以下代码:

    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”

2 个答案:

答案 0 :(得分:1)

我不确定您是否实际拆分数组,行跳转的转义序列为\n,您将其设为\\n

如果你需要将数组转换为String,你也只打印数组lines,你应该为它重新分配一个值,如:

for (int i = 0; i < lines.length; i++) {
     String line = lines[i].toString();

而且我非常确定你不需要toString(),因为它应该来自textBox

的String变量

在此之后你需要找到它是否包含&#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.