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.
我正在创建一个简单的程序,它从 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.