String index out of range: -1 Nybörjare Java

Permalänk
Medlem

String index out of range: -1 Nybörjare Java

Hej, skrev ett litet program som ska leta antalet av en specifik bokstav i en string. Får felmeddelandet i rubriken men förstår inte varför.

Programkoden:

import javax.swing.*;
public class antalBokstaver{
public static void main (String[] arg) {

String text= JOptionPane.showInputDialog("Skriv en mening.");
String letter = JOptionPane.showInputDialog("Skriv en bokstav");

int result = antalBokstaver(text, letter);

JOptionPane.showMessageDialog(null, "Du skrev in textraden: " + text + "\n"
+ "Och ville söka efter tecknet: " + letter+ "\n"
+ "Tecknet finns " + result + " gånger i texten.");
}

public static int antalBokstaver(String text, String letter) {

int antal = 0;

for (int i = 0; i < letter.length(); i++){
if (text.substring(i,1).equals(letter)){
anumberLetters = numberLetters + 1;

}
}
return numberLetters;
}
}

Dold text

Tänkte att någon kanske kunde hjälpa mig att identifiera felet. Tycker att jag har försökt med allt.

Visa signatur

"The two most important days of your life are the day you were born and the day you realise why you were born."

Permalänk
Medlem

Du loopar ju för det första aldrig över din höstack, utan bara efter hur stor din nål är.

Efter ifsatsen står det anumberLetters, ska verkligen a-et i början vara där? Samma rad går att skriva om som numberLetters++.

Men det viktigaste är att text.substring(i,1) inte plockar ut ett tecken, utan alla tecken mellan i och 1. Vilket du nog inte vill, utan du vill nog skriva text.substring(i, i+1) istället.

Visa signatur

Jag är en optimist; det är aldrig så dåligt så att det inte kan bli sämre.

Permalänk
Medlem

Jag har letat i över en timme, men på fel ställe! Det löste sig ju så smidigt nu. Felet pekade mot första raden i loopen!

Vet inte hur det där a:t kom dit. Har inte haft något problem där innan. ^^

Tack så väldigt mycket!

Edit:

Skrivet av zyberzero:

Du loopar ju för det första aldrig över din höstack, utan bara efter hur stor din nål är.

Något jag glömde ändra innan jag postade. Testade bara att ändra till letter för att se om jag fick samma fel.

Visa signatur

"The two most important days of your life are the day you were born and the day you realise why you were born."

Permalänk
Medlem

Du kan göra om letter till char då det bara innehåller en bokstav,
Därefter använda text.charat(i).equals(letter) för att i loopen jämföra varje tecken i strängen med tecknet som letter håller.

Visa signatur

"This is VAR, spelled A-U-T-O"

Permalänk
Medlem

Tack för tipset!

Visa signatur

"The two most important days of your life are the day you were born and the day you realise why you were born."