2017-02-18 4 views
1

Je crée un programme simple qui obtient 2 certaines chaînes sur une entrée d'un JTextArea. Il doit trouver une chaîne non-entière puis trouve un entier. Toutes les valeurs correspondant à la même chaîne non-entière ajouteront et afficheront le résultat dans un JTextField. Comme dans l'exemple ci-dessous, tous les nombres qui correspond à « hache » seront additionnés et le résultat final sera affiché dans le texfield sous l'étiquette « AX Box » (25 + 5 = 30)Java - Trouver une certaine chaîne dans JTextArea

screenshot

Mon code suivant:

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

Mon problème est que le programme ne peut pas trouver la sous-chaîne « hache », « bx » et ainsi de suite. Quelle est la meilleure approche dans ce domaine? Je reçois des erreurs telles que:

Exception dans le thread "AWT-EventQueue-0" java.lang.NumberFormatException: Pour chaîne d'entrée: "hache"

+1

Ce code ne doit pas être compilé à cause de cette ligne 'lines.contains (" ax ")'. La variable 'lines' est un tableau, elle n'a pas la méthode' contains'. – ahoxha

+1

Vous calculez également 'totalAX' incorrectement. La façon dont vous le faites, il ne comptera que le nombre de lignes qui contiennent la chaîne '" ax "' (si vous aviez écrit 'lines [i] .contains (" ax ")' au lieu de 'lines.contains (" hache ")". – ahoxha

Répondre

1

Je ne suis pas sûr que vous partagez en fait la tableau, la séquence d'échappement pour un saut de ligne est \n, vous l'avez comme \\n.

Vous imprimez également que le tableau lines si vous avez besoin pour le convertir en chaîne que vous devriez réaffectant une valeur pour elle comme:

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

Et je suis sûr que vous n'avez pas besoin toString() comme cela devrait venir comme une variable String de la zone de texte

Ensuite, vous devez trouver s'il contient le "ax" et l'index où il est d'abord contenu, gardez ce nombre et utilisez-le pour sous-traiter toute la ligne pour trouver le nombre, en gardant à l'esprit que le nombre devrait être à la dernière place de la chaîne que vous seriez lookin g à quelque chose comme ça après (à l'intérieur) de la boucle:

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

Ou dans un oneliner:

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

I utilisé regex pour extraire les numéros des lignes qui correspondent à votre texte.

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.