2017-02-18 15 views
1

JTextAreaからの入力に2つの特定の文字列を取得する簡単なプログラムを作成しています。非整数の文字列を見つけてから整数を見つける必要があります。同じ非整数文字列から一致するすべての値が追加され、結果がJTextFieldに表示されます。以下の例のように、「斧」が一緒に追加される一致し、最終的な結果は、ラベルの下texfieldに表示されるすべての数字「AXボックス」(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); 
     } 
} 

私の問題は、プログラムがサブ「斧」ように、「BX」などを見つけることができないということです。これで最善のアプローチは何ですか?スレッド内

例外「AWT-EventQueueの-0」java.lang.NumberFormatException:入力文字列の場合:「斧」

+1

このコードは 'lines.contains(" ax ")'という行のためにコンパイルしないでください。 'lines'変数は配列であり、' contains'メソッドはありません。 – ahoxha

+1

'totalAX'も間違って計算されています。あなたがそれをやっているやり方では、 '' ax ''文字列を含む行の数だけを数えます(' lines [i] .contains( "ax") '' lines.contains( " ax ")' – ahoxha

答えて

1

私はあなたが実際に分割していることはよく分からない私のようなエラーが発生します配列の場合、ラインジャンプのエスケープシーケンスは\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); 
} 

または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. 
関連する問題