Groß/KleinBuchstaben zählen

desperate

Mitglied
Hallo liebe Leute,
hier meine Frage und ich hoffe ihr könnt mir helfen. Bin noch nicht lange dabei und daher wahrscheinlich auch eher simplerer natur die Frage...

Ich soll die Anzahl der Groß bzw Kleinbuchstaben, sowie aller Zeichen in einem Stringfeld w[] ermitteln.
Kann mir da jemand erklären wie das geht... ALso wie ich alle Zeichen ermittle weiß ich schon.
Nur das mit den Groß/Kleinbuchstaben weiß ich nicht. Möchte dann bei der Ausgabe stehen haben:
Großbuchstaben: x
Kleinbuchstaben: y

Vielen Dank schonmal im vorraus.
verzweifelte Grüße
 
Java:
int getLowerCaseLetters(final String string) {
	char[] chars = string.toCharArray();
	int amount = 0;
	for (char c : chars) {
		if (Character.isLowerCase(c)) amount++;
	}
	return amount;
}

Wie das dann mit dem Zählen der Großbuchstaben geht, kannst du dir dann wohl denken.
 
Zuletzt bearbeitet:
Guten Abend und danke für eure Hilfe. Es hat mir auch schon geholfen, nur bin ich leider immer noch nicht viel weiter mit meinem Programm, da ich absoluter Anfänger bin. Sorry...
Ich schilder mal kurz die Probleme: Ich habe jetzt die Methoden quasi "kopiert", um die Anzahl der Groß und Kleinbuchstaben zu zählen.
Ich möchte aber auch noch ein Feld r der Rückgabewerte erzeugen, welches so aussehen soll:
r[0] : Anzahl der Kleinbuchstaben
r[1] : Anzahl der Großbuchstaben
Habe damit auch schon angefangen aber weiß nicht, wie ich es aufs " Papier " bringe soll, genauso wie die main Methode um alle anderen Methoden aufzurufen. Ich setz mal meinen code hier rein, da stehen als Kommtare auch noch einige Fragen. Wäre super nett, wenn ihr mir nochmal helfen könntet.
 
Zuletzt bearbeitet:
uh sorry habe vergessen den code in dieser Form zu posten...

Java:
 public class Buchstaben{
	
		
		 static int getLowerCaseLetters(final String HaLLo){ // Methode Kleinbuchstaben zählen
			char[] chars = HaLLo.toCharArray(); // ist das Hallo da so richtig???
			int amount = 0;
			
			for (char c : chars){
				if (Character.isLowerCase(c)) amount++;
			}
		return amount;  
			 
		 }
		
		 static int getUpperCaseLetters(final String HaLLo){ // Methode Großbuchstaben zählen
				char[] chars = HaLLo.toCharArray();
				int amount = 0;
				
				for (char c : chars){
					if (Character.isUpperCase(c)) amount++;
				}
			return amount;  }
		 
		  int r [] = new int [2]; {		 // Feld der Rückgabewerte
          r [0]= ;                       // Was muss ich hier eintragen???
          r [1]= ;
        		  
            			
		 }
		public static void main (String[] args){    
			
			getLowerCaseLetters ();             // Hier muss ich doch die Methoden aufrufen oder?
			getUpperCaseLetters ();
			System.out.println(  );
			
		
			
		
	}
    	   
    	   
	}
 
Zuletzt bearbeitet:
@desperate

Bist du dir bewusst, dass 'HaLLo' lediglich der Name des String ist, der analysiert wird, aber nicht der String selbst?
Variablen werden per Konvention klein und mit CamelCases geschrieben (also z.B. countNumbers, getLowerCaseLetters, etc.)

Dein Feld finde ich persönlich etwas unglücklich gewählt. Du müsstest dir entweder merken, welcher der beiden Indizes welchen Wert beinhaltet, oder es irgendwo notieren.
Den Wert weißt du so zu:
r[0] = amount;

EDIT: deine Array-Deklaration sollte gar nicht erreichbar sein. Nach "return" wird die Methode sofort verlassen, vollkommen egal, was drunter steht.


Dein Code sollte eigentlich nicht kompiliert werden können. In den Methoden selbst definierst du einen Parameter. In dem Fall 'final String HaLLo', beim Methodenaufruf in der Main übergibst du aber keine.

Der Aufruf sollte so aussehen:

Code:
public static void main (String[] args){    

	String toAnalyze = "HaLLo";
	int countLowerCases = getLowerCaseLetters(toAnalyze);             
	int countUpperCases = getUpperCaseLetters(toAnalyze);
	System.out.println("lower: " + countLowerCases  );
	System.out.println"upper: " + countUpperCases)

	System.out.println(getLowerCaseLetters(toAnalyze));
	System.out.println(getUpperCaseLetters(toAnalyze));
}

Deine Funktionen haben Rückgabewerte, du machst damit aber nichts, sie "laufen ins Leere". Um eine Rückgabe wirklich zu benutzen, musst du eine Variable deklarieren, die den Wert annimmt (in meinem Fall heißen die countLowerCases und countUpperCases).
Alternativ kannst du auch die Funktion direkt im System.out.println() aufrufen.
 
Zuletzt bearbeitet:
Und da bin ich wieder. Hab es jetzt nochmal etrwas überarbeitet. Bekomme aber einen Fehler beim Rückgabewert, den ich nicht verstehe. Ist im Code markiert und ja für weitere Tipps bin ich immer offen.
Java:
static int buZaehl(final String w){ 
		    int r = [2];              // Hier bekomme ich ein Fehler, irgendwas wird erwartet???
		    
		    char[] chars = w.toCharArray(); 
			int kl = 0;
			int gr = 0;
			
			for (char c : chars){
				if (Character.isLowerCase(c)) kl++;

				if (Character.isUpperCase(c)) gr++;
}           r[0] = kl;
		    r[1] = gr;
			
			return r;
	}
	  public static void main ( String[]args){
		  
		  String toAnalyze = "TestReihe";
			int countLowerCases = buZaehl(toAnalyze);             
			int countUpperCases = buZaehl(toAnalyze);
			
			System.out.println("Kleinbuchstaben: " + countLowerCases  );
			System.out.println("Großbuchstaben: " + countUpperCases);

	  }
 
Und da bin ich wieder. Hab es jetzt nochmal etrwas überarbeitet. Bekomme aber einen Fehler beim Rückgabewert, den ich nicht verstehe. Ist im Code markiert und ja für weitere Tipps bin ich immer offen.

Warum schreibst du nicht den Compiler Fehler hier hin wenn du schon einen hast?
Fehlermeldungen sollten immer mitgepostet werden! Das erspart mühsames nachfragen 🙂

Java:
static int buZaehl(final String w){ 
		    int r = [2];              // Hier bekomme ich ein Fehler, irgendwas wird erwartet???

Du willst der Variable "r" etwas zuweisen. Da es sich hier um eine Variable von Typ "int" handelt kannst du nur Zahlen zuweisen.
Dein "[2]" ist keine gültige Zuweisung. Eckige Klammer deuten auf einen Arrayzugriff per Index hin. Was willst du denn deiner Variable "r" zuweisen?
 
AH sorry hier ist der Fehler:
Java:
Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
	Syntax error on token "=", Expression expected after this token
also r [] soll mein rückgabefeld sein. cih wollte es dann so haben, dass die rückgabewert folgenden aufbau haben:
r[0] : Anzahl der Kleinbuchstaben in w []
r[1] : Anzahl der Großbuschtaben in w[]
 
Dann musst du "r" richtig deklarieren und auch entsprechend initialisieren!

int kann nur einen Wert haben. Was du brauchst ist ein int[] mit einer Länge von 2.
 
OK habe ich gemacht, nur jetzt taucht ein Fehler bei der return aktion auf
Java:
static int buZaehl(final String w){ 
		    int [] r = new int [2];             
		    
		    char[] chars = w.toCharArray(); 
			int kl = 0;
			int gr = 0;
			
			for (char c : chars){
				if (Character.isLowerCase(c)) kl++;

				if (Character.isUpperCase(c)) gr++;
}           r[0] = kl;
		    r[1] = gr;
			
			return r;  // Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
			           //Type mismatch: cannot convert from int[] to int
	}
	  public static void main ( String[]args){
		  
		  String toAnalyze = "TestReihe";
			int countLowerCases = buZaehl(toAnalyze);             
			int countUpperCases = buZaehl(toAnalyze);
			
			System.out.println("Kleinbuchstaben: " + countLowerCases  );
			System.out.println("Großbuchstaben: " + countUpperCases);

	  }
 
Super die Exception steht dabei 🙂

Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Type mismatch: cannot convert from int[] to int

Aber wo bleibt die Eigeninitiative?
Die Exception beschreibt aufs Wort genau wo das Problem liegt.

Er will wo von "int[]" auf "int" casten. Der Fehler taucht in der Zeile "return r;" auf.
Jetzt musst du dir nur noch überlegen warum er nach "int" casten will und wie du es beheben/richten kannst.
 
Hallo nochmal. Ich habe es endlich hinbekommen. Tut mir Leid wenn ich euch damit genervt habe und diese einfachen fragen stelle. Aber es kommen bestimmt noch mehr...
Hier der Code damit ihr mir auch glaubt.....
Java:
static int[] buZaehl(final String w){ 
		    int [] r = new int [3];             
		    
		    char[] chars = w.toCharArray(); 
			int kl = 0;
			int gr = 0;
			
			
			for (char c : chars){
				if (Character.isLowerCase(c)) kl++;
				if (Character.isUpperCase(c)) gr++;
            }
			int zeichen = w.length();
			r[0] = kl;
		    r[1] = gr;
			r[2] = zeichen;
			return  r;  
	}
	  public static void main ( String[]args){
		  
		    String toAnalyze = "Ich habe es geschaft!!! JUHU";
		    		
		    
		    int countLowerCases = buZaehl(toAnalyze)[0];             
			int countUpperCases = buZaehl(toAnalyze)[1];
			int ze = buZaehl(toAnalyze)[2];
			System.out.println("Kleinbuchstaben: " + countLowerCases  );
			System.out.println("Großbuchstaben: " + countUpperCases);

			System.out.println("Zeichen: " + ze);
	  }
und vielen vielen Dank für die tollen Tipps. Echt super!!!
 

Zurück
Oben