Måste man använda någon Reader för att räkna hur mycket det sökta ord finns i JTextArea?

Trädvy Permalänk
Medlem
Registrerad
Apr 2016

Måste man använda någon Reader för att räkna hur mycket det sökta ord finns i JTextArea?

Hej
Ursäkta med språket.

Jag har skapat en enkel javaprogram som använder JToolbar, JTextArea, JTextField. Man matar in text i JTextField och program ska undersöka om JTextArea innehåller det ord eller nej.

Eftersom jag inte har läst så mycket om strömmar och filer, jag tänker att försöka det med actionListeners and for-loop

ToolbarSearch(){ add(textAr, BorderLayout.WEST); add(tb, BorderLayout.EAST); textAr.setText("Välkommen till Javavärld. Jag heter XXXXXX \n" + "och det program kallas ToolbarSearch. Om man tittar på \n" + "höger man kan se en plats för text. Du skriver där \n" + "ord eller bokstav som du vill att söka. Under det, man\n" + "även kan titta hur många det ord som du söker finns i texten."); tb.add(l1); tb.add(textFd); tb.add(l2); tb.add(sluta); tb.addSeparator(); setVisible(true); pack(); setDefaultCloseOperation(EXIT_ON_CLOSE); textFd.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { String textsearch = textFd.getText().toString(); String bigtext = textAr.getText().toString(); for(int i = 0; i<bigtext.length();i++){ if(bigtext.contains(textsearch)){ antal++; l2.setText(l2.getText()+antal); } if(!bigtext.contains(textsearch)){ JOptionPane.showMessageDialog(tb, "Det går inte att hitta"); }} if(e.getSource()==sluta){ System.exit(0); } } }); }

program fungerar ganska bra. Ganska bra. Men finns ett stor problem. Antal av sökta ordet ger 63264265266267268. Jag tror att det beror på att jag använder for-loop eller använder for-loop felaktigt.

Kan man inte använda for-loop eller liknande? Jag vet inte så mycket om Readers

Trädvy Permalänk
Medlem
Registrerad
Nov 2016

contains kommer ju returnera sant första träffen den hittar. Din loop genom strängen du söker i kommer ju räkna upp antal lika många gånger som det finns tecken även om det bara finns en match. Så det är helt fel logik för det du försöker göra.

Den avslutande setText borde inte heller vara i loopen, du sätter ju ihop strängen lika många gånger som du loopar. Gör det efter loopen.

Kolla på indexOf istället, spara undan index för varje loop och använd det nästa gång så den inte matchar på samma ställe i strängen hela tiden.

int index = 0; while((index = bigtext.indexOf(textsearch, index)) != -1) { antal++; index++; }