【问题标题】:Java - Finding a certain string in JTextAreaJava - 在 JTextArea 中查找某个字符串
【发布时间】:2017-07-08 01:37:49
【问题描述】:

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

【问题讨论】:

  • 由于lines.contains("ax") 这一行,这段代码不应该编译。 lines 变量是一个数组,它没有contains 方法。
  • 您还错误地计算了totalAX。你这样做的方式,它只会计算包含"ax"字符串的行数(如果你写的是lines[i].contains("ax")而不是lines.contains("ax")

标签: java arrays string jtextfield jtextarea


【解决方案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.

【讨论】:

    【解决方案2】:

    我不确定你实际上是在拆分数组,换行的转义序列是\n,你有它作为\\n

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

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

    我很确定您不需要 toString(),因为它应该作为文本框中的字符串变量

    在此之后,您需要查找它是否包含“ax”和第一次包含它的索引,保留该数字并使用它对整行进行子串以查找该数字,因此请记住该数字应该是在字符串的最后一个位置,您将在(内部)循环之后看到类似这样的内容:

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

    或者在单列中:

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

    【讨论】:

      猜你喜欢
      • 2014-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-11
      • 1970-01-01
      • 2014-12-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多