Java Programm, das kleine Buchstaben in einem String zählen soll und bei großen Buchstaben oder Sonderzeichen abbrechen soll

f61

Grünschnabel
Code:
public class CountLetters {
   static int count_lower_case_letters(String s){
     int zaehler=0;
     int i=0;

        
        while (Character.isLowerCase(s.charAt(i))||(Character.isUpperCase(s.charAt(i)))){
            
          
        if (Character.isLowerCase(s.charAt(i)>Character.isUpperCase(i))){
            zaehler++;
            
        
        }else if(Character.isUpperCase(s.charAt(i))){
            return zaehler;
        }
        i++;
    }
        return zaehler;
  
}
    public static void main(String[] args) {
        String s="bszhdufhisdhifheis";
       System.out.println(count_lower_case_letters(s));
    }
}

Das hier ist mein Ansatz. Etwas klappt aber noch nicht ganz ich würde mich sehr über eure Hilfe freuen.
 
Zuletzt bearbeitet:

melmager

Erfahrenes Mitglied
Da du ja scheinbar nur Kleinbuchstaben zählen willst muss deine while schleife nur ausgeführt werden wenn einer vorliegt und abbrechen wenn das letzte zeichen vorliegt.

Code:
while (Character.isLowerCase(s.charAt(zaehler)) && zaehler < s.length()) {
   zaehler++;
}
 

f61

Grünschnabel
Da du ja scheinbar nur Kleinbuchstaben zählen willst muss deine while schleife nur ausgeführt werden wenn einer vorliegt und abbrechen wenn das letzte zeichen vorliegt.

Code:
while (Character.isLowerCase(s.charAt(zaehler)) && zaehler < s.length()) {
   zaehler++;
}
Ich danke dir. Jedoch besteht ein Problem, dass ich bis jetzt noch nicht lösen konnte und zwar erscheinen folgende Meldungen sobald ich nur kleine Buchstaben in meinen String eingebe:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException
at java.base/java.lang.String.charAt(String.java:1325)
at CountLetters.count_lower_case_letters(CountLetters.java:6)
at CountLetters.main(CountLetters.java:15)
Diese Meldungen erscheinen überraschenderweise nur dann wenn ich nur kleine Buchstaben eingebe, sobald ich einen großen Buchstaben eingebe tut das Programm was es tun soll.

Ich würde mich über deine Hilfe freuen.
 

melmager

Erfahrenes Mitglied
Bei der Meldung will er ausserhalb der Stringlänge zugreifen

Code:
zaehler <= s.length()

er zählte also zu weit hoch, mit der Änderung sollte es passen

oder
Code:
s.length() > zaehler
 

melmager

Erfahrenes Mitglied
Code:
while (s.length() > zaehler && Character.isLowerCase(s.charAt(zaehler))) {
   zaehler++;
}

wenn dann immer noch der fehler auftritt gebe ich auf - die version sollte das "und" abbrechen wenn die länge des strings erreicht ist

"abc" hat ja die länge 3 ; charAt darf max mit 2 arbeiten - wenn also der zähler 3 ist darf das nicht mehr ausgewertet werden.

wenn c dran ist : zaehler ist 2; also hoch um 1 = 3; dann ist aber length bein nächsten while lauf nicht mehr grösser zaehler und der zweite teil von && wird nicht mehr ausgewertet

Wir lernen : reihenfolge in auswertungen ist nicht egal und > bzw >= bzw < kann zum fallstrick werden :)
 

f61

Grünschnabel
Code:
while (s.length() > zaehler && Character.isLowerCase(s.charAt(zaehler))) {
   zaehler++;
}

wenn dann immer noch der fehler auftritt gebe ich auf - die version sollte das "und" abbrechen wenn die länge des strings erreicht ist

"abc" hat ja die länge 3 ; charAt darf max mit 2 arbeiten - wenn also der zähler 3 ist darf das nicht mehr ausgewertet werden.

wenn c dran ist : zaehler ist 2; also hoch um 1 = 3; dann ist aber length bein nächsten while lauf nicht mehr grösser zaehler und der zweite teil von && wird nicht mehr ausgewertet

Wir lernen : reihenfolge in auswertungen ist nicht egal und > bzw >= bzw < kann zum fallstrick werden :)
Es hat jetzt geklappt.:)
Ich danke dir für deine Bemühungen, ich habe das ganze jetzt auch verstanden.
Viele Grüße.