Java - 在 JTextArea 中查找某个字符串

Java - Finding a certain string in JTextArea

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

我的以下代码:

    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"

我不确定你是否真的在拆分数组,换行的转义序列是\n,你把它写成\n

您也只打印数组 lines 如果您需要将其转换为字符串,您应该为它重新分配一个值,例如:

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

而且我很确定您不需要 toString(),因为它应该作为来自 textBox

的字符串变量出现

在此之后,您需要查找它是否包含 "ax" 以及它首次包含的索引,保留该数字并使用它对整行进行子串以查找该数字,因此请记住数字应该在字符串的最后一个地方,你会在循环之后(内部)看到这样的东西:

    if (line.contains("ax") {
      int theIndex = line.indexOf("ax");
      line = line.substring(theIndex);
}

或在单班机中:

 if (line.contains("ax") {
  line = line.substring(line.indexOf("ax"));
}

我使用 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.