2017-02-18 6 views
1

Я создаю простую программу, которая получает 2 определенных строки на входе от JTextArea. Он должен найти нецелую строку, затем найдет целое число. Все значения, совпадающие с одной и той же не целой строкой, будут добавлять и отображать результат в JTextField. Как и в примере, приведенном ниже, все числа, которые спички «ах» будут добавлены вместе, и конечный результат будет отображаться в texfield под маркой «AX Box» (25 + 5 = 30)Java - Поиск определенной строки в JTextArea

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); 
     } 
} 

Моя проблема заключается в том, что программа не может найти подстроку «топор», «ВХ» и так далее. Какой лучший подход в этом? Я получаю ошибки, такие как:

Исключение в потоке «АВТ-EventQueue-0» java.lang.NumberFormatException: Для ввода строки: «Топор»

+1

Этот код не должен компилироваться из-за этой строки 'lines.contains (" ax ")'. Переменная 'lines' является массивом, она не имеет метода' contains'. – ahoxha

+1

Вы также неправильно вычисляете 'totalAX'. То, как вы это делаете, будет считать только количество строк, содержащих строку '' ax ''(если вы написали' lines [i] .contains ("ax") 'вместо' lines.contains (" топор ")'. – ahoxha

ответ

1

Я не уверен, что вы на самом деле расщепления требуются массив, escape-последовательность для скачка линии - \n, у вас есть \\n.

Вы также печатаем только массив lines, если вам нужно, чтобы преобразовать его в строку, вы должны быть переназначение значение его, как:

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

И я уверен, что вам не нужен toString() как он должен появиться как переменная String из textBox

После этого вам нужно найти, содержит ли он «топор» и индекс, в котором он сначала содержится, сохранить это число и использовать его для подстроки всей строки, чтобы найти номер, поэтому, имея в виду, что число должно быть на последнем месте строки, на которую вы будете смотреть г на что-то вроде этого после того, как (внутри) цикла:

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

Я использовал 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.