Mehrere Methoden an einem String

Status
Nicht offen für weitere Antworten.
Hallo Leute,

ich komme mit dieser Aufgabe überhaupt nicht zurecht.

"Schreiben Sie eine Methode kleinGross, die eine Zeichenkette als Parameter erhält und als Ergebnis die in Klein-Gross-Schreibung umgewandelte Zeichenkette liefert. Genauer:
- jeder (Klein-) Buchstabe nach einem Leerzeichen, Punkt oder Komma bzw. ganz am Anfang
der Zeichenkette wird ggf. in einen Großbuchstaben umgewandelt;
- jeder andere (Groß-) Buchstabe in der Zeichenkette wird ggf. in einen Kleinbuchstaben
umgewandelt;
- alle sonstigen Zeichen der Zeichenkette bleiben unverändert.


Z.B.: Parameterwert à Rückgabe

Hallo! Wie geht's? Ok -na ja, nicht 1A ..B
hallo! wie geht's? ok -na ja, nicht 1a ..b
=
Hallo! Wie Geht's? Ok -na Ja, Nicht 1a ..B



Hinweise:
- wenn man die Zeichenkette zunächst in Kleinschreibung umwandelt, braucht man an-
schließend nur noch die "Wortanfänge" wie oben beschrieben zu behandeln;
- ein einzelnes Zeichen, das ein Kleinbuchstabe ist, kann mit += 'A' – 'a' in den
entsprechenden Großbuchstaben umgewandelt werden."


Die String-Eingabe hab ich mit "toLowerCase" klein gemacht. Wie soll ich weiter vorgehen? Ich dachte an eine for-Schleife und Char-Array mit dem Inhalt der String.length() und ein paar If-Anweisungen, aber irgendwie komme ich da nicht weiter. Für die Lösung der Aufgabe soll man nur die Methoden der Klasse String verwenden.

Danke für die Hilfe

VG
Daniel
 
Ok, wo ist dein Problem? Du hast dir Gedanken gemacht und die sind doch ganz brauchbar! Nur Mut, wag dich an die Implementierung 😀 Ellenlange if-else Verschachtelungen werden schon nicht vorkommen. Hier mal ein Code-Schnipsel
Code:
if ( (charArray[i-1]==' ' || charArray[i-1]=='.' || charArray[i-1]==',') && (//Zeichen ist Buchstab) )
{
          //ersetze das charArray[i] durch den entsprechenden Großbuchstaben
         //Character.isLetter(char h) und Character.toUpperCase(char h) darfst du nicht, oder? is ja nicht aus der   
         //string-wrapper-klasse
}
 
Die Aufgabe lautet in etwa:

Mache aus "guten mOrgen Es ist hEUTE Donnerstag, der 22.11. und für allE Ein gutEr T12345AG."

"Guten Morgen Es Ist Heute Donnerstag, Der 22.11. Und Für Alle Ein Guter T12345ag."

dies könnte über den Weg gehen, erst einmal alles Klein zu schreiben = toLowerCase()

sieht dann etwa so aus:
"guten morgen es ist .... t12345ag."

Danach sollstest Du jedes Zeichen durchgehen und alle auf ein Leerzeichen folgenden Buchstaben durch einen Großbuchstaben ersetzen.

Dabei würde ich nicht mit +A-a (Rechnen mit Buchstaben) verwenden sondern einfach toUpperCase() für den einzelnen Buchstaben.

Siehe am besten für alle Operationen mit Strings:

http://www.galileocomputing.de/openbook/javainsel7/javainsel_04_001.htm

oder

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html


Viel Glück - die Aufgabe ist für Anfänger geeignet Du wirst dabei aber trotzdem viel lernen...
 
Hi,

vielen Dank für die Antwort. Hab gerade eine Idee bekommen und ich glaube, dass die funktioniert. Werde meine Lösung danach posten.

lg

Daniel
 
Ok, das habe ich gebastelt. Es werden in Eclipse keine Syntaxfehler angezeigt, aber wenn ich ausführe, kommen folgende Fehler:

1. Zeichen: .,!,? und Leerzeichen werden nicht mehr angezeigt
2. Die nachfolgenden Buchstaben bleiben klein, liegt wohl an Arrayslot-Überschreibung aus der for-Schleife.
3. Die zusammengesetzten Chars als String, werden nur innerhalb der For-Schleife als println angezeigt. In der Konsole steht dann "Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 41 at java.lang.String.charAt(Unknown Source) at Aufgabe1.main(Aufgabe1.java:25) ".
Außerhalb der For-Schleife, kommt nur die Fehlermeldung, aber keine Ausgabe.

Ich kann da keine Fehler feststellen.




Code:
import java.io.*; 

class Aufgabe1
{
  public static void main (String[] args) throws IOException
  {
	
	String eingabe = "Hallo!wie geht´s? ok -na ja, nicht 1a ..b";
	
	//alles kleiner machen
	String klein = eingabe.toLowerCase();
	System.out.println(klein);
	
	//String-Länge bestimmen
	System.out.println("Der Satz hat so viele Zeichen: " +  klein.length());
	
	//Vorbereitung
	char [] umwandlung = new char [klein.length()]; //Char-Array mit der String-Länge erstellen
	System.out.println(umwandlung.length); // Länge des char-Arrays
	String summe =""; //Zusammensetzung der einzelnen Chars
	
	for(int i = 0;i<=klein.length();i++){
		
		//Aus String einzelne Chars machen
		umwandlung[i]=klein.charAt(i);
		
		//Anfangsbuchstaben groß machen
		if (i==0|| i<0)
			umwandlung[0]+='A'-'a';
		
		//Falls Punkt oder Komma, Großschreibung
		if (umwandlung[i]=='.'||umwandlung[i]==',')
			umwandlung[i]+='A'-'a';
		
		//Falls Ausrufezeichen oder Fragezeichen, Großschreibung
		if (umwandlung[i]== '!' || umwandlung[i]=='?')
			umwandlung[i]+='A'-'a';
		
		//Falls Leerzeichen,Großschreibung
		if (umwandlung[i]== ' ')
			umwandlung [i]+='A'-'a';  
			
		//Ausgabe der Chars
		summe=summe+umwandlung[i];
		System.out.println(summe);
		
	}
	
	
 }
  }



EDIT. Hab grade bemerkt, dass ich doppelte Arbeit gemacht habe und es wesentlich einfacher geht. Lade im Laufe des Tages die verbesserte Version hoch.
 
Wenn du z.b. grade bei einem ! bist, ersetzt du das ! durch einen Großbuchstaben..., du musst aber das nächste Zeichen ersetzen. Ich hab deinen code mal ein bissel umgeschrieben, so funktioniert er: (mit Strings)



Code:
import java.io.*;

class Aufgabe1
{
  public static void main (String[] args) throws IOException
  {

   String eingabe = "Hallo!wie geht´s? ok -na ja, nicht 1a ..b";

   String klein = eingabe.toLowerCase();
   System.out.println(klein);


  String [] umwandlung = klein.split("");; 
   String summe =""; 

   for(int i = 1;i<=klein.length();i++){


      //Anfangsbuchstaben groß machen
      if (i<2){
         umwandlung[1] =umwandlung[1].toUpperCase();}

      //Falls Punkt oder Komma, Großschreibung
      if (umwandlung[i].equals(".")||umwandlung[i].equals(",")){
         umwandlung[i+1] =umwandlung[i+1].toUpperCase();}

      //Falls Ausrufezeichen oder Fragezeichen, Großschreibung
      if (umwandlung[i].equals( "!") || umwandlung[i].equals("?")){
         umwandlung[i+1] = umwandlung[i+1].toUpperCase();}

      //Falls Leerzeichen,Großschreibung
      if (umwandlung[i].equals( " ")){
         umwandlung [i+1] =umwandlung[i+1].toUpperCase();}

      summe += umwandlung[i];
      System.out.println(summe);

   }}}

Du solltet dir übrigens gleich schonmal angewöhnen, die { und } bei if Abfragen immer zu verwenden, kann ansonsten sehr schnell zu Fehlern kommen
 
@ Schandro

vielen herzlichen Dank. Die Splitmethode ist mir ganz neu. Hatten wir bisher nicht durchgenommen, ist aber sehr brauchbar.

lg
Daniel
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben