String splitten und berichtigen?

Syrghar

Mitglied
Hallo,

neu im Forum und hier gleich der erste Beitrag. :bahnhof:

Bin vollkommen neu in Java und generell der Programmierung. Nun versuche ich mich das erste Mal mit Strings.

Möchte einen Text in einzelne Sätze aufsplitten, um dann zu prüfen ob der erste Buchstabe ein Großbuchstabe ist und wenn nicht, soll dieser in einen Großbuchstaben umgewandelt werden bzw. auch nach "der, die und das".
Hier mal was ich bisher habe. Die Ausgabe ist so, wie ich mir das gedacht habe, was rauskommen müsste. Nun stehe ich aber total an. Keine Ahnung wie ich den jeweils ersten Buchstaben eines Satzen bzw. nach "der, die und das" in einen Großbuchstaben umwandeln kann, wenn er es nicht schon ist.

Java:
public static void umwandeln(String testText)
	{
		//Text in einzelne Sätze teilen, mit "Punkt" als Trenner.
		String trenner = ".";
		
		StringTokenizer satz = new StringTokenizer(theText, trenner);

		while (satz.hasMoreTokens())
		{
			System.out.println(satz.nextToken());
			
		}

Meine Ausgabe

Inhalt im Testfile: Das ist ein Test. Noch ein SATZ. und noch einer.
Ausgabe in der Konsole:
Das ist ein Test
Noch ein SATZ
und noch einer

Bin auf toUpperCase (); gestossen, jedoch geht hier irgendwie gar nichts, da ich auch nicht verstehe was genau passiert.
Wäre String.split(); möglicherweise besser geeignet? Was ist der Unterschied?

Danke schonmal vorweg für eure Hilfe.


Mfg. Syrghar
 
Zuletzt bearbeitet:

Gucky

Top Contributor
Wozu gibt es Google?

Du hast im Methodenkopf die Variable testText und im Rumpf greifst du auf die Bariable theText zu. Eigentlich hätte die IDE da meckern müssen.

Ich glaube, dass für dein Vorhaben der StrintBuilder eher geeignet ist, da du dort einzelne Zeichen verändern kannst. Ein String ist unveränderbar oder auch "immutable".
 

knilch

Bekanntes Mitglied
Hi,
Du kannst das auch mit string.splitt machen.
hier mal ein Beispiel:
Java:
public static void main(String[] args) {
    String testString = "Das ist ein Test. Noch ein SATZ. und noch einer.";
    for (String sentence : getSentences(testString)) {
        System.out.println(sentence);
    }
}


private static String [] getSentences(String sentence) {    
    String [] sentences = sentence.split("\\. ");
    for (int i = 0; i < sentences.length; i++) {
        // check if sentence starts with uppercase character, if not convert it
        if(!Character.isUpperCase(sentences[i].charAt(0))) {
            sentences[i] = Character.toUpperCase(sentences[i].charAt(0)) + sentences[i].substring(1, sentences[i].length());
        }
        // check if sentence ends with ".", if noit append it
        if(!sentences[i].endsWith(".")){
             sentences[i] = sentences[i] + ".";
        }
    }
    return sentences;            
}
 
Zuletzt bearbeitet:

Syrghar

Mitglied
Vielen Dank für die Rückmeldungen.

Habe folgendes Problem:
Java:
public static void korrigiere(String theText)
	{	
		
		
		StringBuilder sb = new StringBuilder([B]theText[/B]);	
		
		char grossBuchstabe = Character.toUpperCase(sb.charAt(0));
		sb.setCharAt(0, grossBuchstabe);
		
		
		
		System.out.println(sb);
				
	}

Verstehe leider überhaupt nicht was hier falsch ist bzw. wie das funktioniert. Auch diverses Suchen (I-Net, Unterlagen) hat mir nicht geholfen.
Wenn ich statt dem String "theText", der übergeben wird, selbst etwas reinschreibe, dann wird der erste Buchstabe in einen Großbuchstaben umgewandelt, so tut sich aber nichts.
Da das schon nicht klappt komm ich auch nicht dahinter, wie ich nach Zeichenketten suchen kann, um auch danach einen Großbuchstaben zu bekommen (z.B. nach einem "das").
 

Syrghar

Mitglied
Ok, bin nun etwas weitergekommen.

Java:
public static void korrigiere(String theText)
	{	
		
		

		StringBuilder sb = new StringBuilder(theText);	
		
		//Ersten Buchstaben des Files in Großbuchstabe umwandeln, wenn es sich um einen Buchstaben handelt
		char grossBuchstabe = Character.toUpperCase(sb.charAt(1));
		if(Character.isLetter(grossBuchstabe))
		{
		sb.setCharAt(1, grossBuchstabe);
		}

		//Satzanfänge suchen mit Zeichenfolge ". "
		if(sb.indexOf (". ") != -1)
		{
			for(int satzAnfang=0; satzAnfang!=-1; satzAnfang++)
			{
				
				satzAnfang = sb.indexOf ( ". ", satzAnfang);
				System.out.println(satzAnfang);
				char grossBuchstabe2 = Character.toUpperCase(sb.charAt(satzAnfang+2));
				sb.setCharAt(satzAnfang+2, grossBuchstabe2);
				
			}
		}
			
			
		System.out.println(sb);
		
				
	}
}

Die erste Stelle im String wird nun geprüft, ob überhaupt ein Buchstabe und wenn ja in einen Großbuchstaben umgewandelt.
Für die erste Stelle an der ein neuer Satz anfängt, gesucht mit ". ", funktionierte es auch in einen Großbuchstaben umzuwandeln.
Mit der for-Schleife finde ich auch alle Positionen, nur wird die for-Schleife nie beendet, obwohl -1 zurückgegeben wird.
 

Gucky

Top Contributor
satzAnfang wird auf -1 gesetzt, der Rest vom Schleifenrumpf wird ausgeführt und dann wird satzAnfang um einen inkrementiert und hat dann den Wert 0. Die Schleife prüft, ob satzAnfang -1 ist, ist es nicht und es geht weiter.
 

Syrghar

Mitglied
Hoppla, ok seh ich nun.
Wie könnte ich dieses Problem lösen? Einfach satzAnfang vorher um eines runtersetzen bring ja nichts, da ich dann immer wieder bei Wert1 hängen bleibe.
 

dmessn28

Mitglied
Oder du machst nach dem indexOf ein break, falls satzAnfang -1 ist. (Die For-Schleife kann dann im Prinzip durch eine Endlosschleife ersetzt werden) Bei einer while würde doch immer der 2. Buchstabe vom String groß geschrieben werden, oder?

Und denk dran, dass Indizes in Java fast immer bei 0 beginnen, nicht bei 1. :)
 
Zuletzt bearbeitet:

Syrghar

Mitglied
Mit break; hat`s geklappt. Danke. :)

Lässt sich sowas in die Richtung auch machen:
Java:
for(i=0; i<=sb.length(); i++)
	{
			
	}

Die Überlegung dabei ist, eine for-Schleife zu haben und dort für verschiedene Situationen jeweils ein if-Block. z.B. für ".", ". ", "das", "der", "die" kommt im Text vor.
Schleife soll abgebrochen werden, sobald das Ende des Strings erreicht ist.

OK, Fehler gefunden. Geht nun.
 
Zuletzt bearbeitet:

Syrghar

Mitglied
Befasse mich weiter mit meinem StringBuilder Problem.

Möchte in meinem Text nach gewissen Zeichenketten suchen, z.B. der, die, das, und danach groß schreiben. So in etwa:
Java:
StringBuilder stringText = new StringBuilder(theText);	
	
		//Ersten Buchstaben des Files in Großbuchstabe umwandeln, wenn es sich um einen Buchstaben handelt
		char grossBuchstabe = Character.toUpperCase(stringText.charAt(1));
		stringText.setCharAt(1, grossBuchstabe);
		
		//Satzanfänge suchen mit Zeichenfolge ". "
		for(int i=0; i<=stringText.length(); i++)
		{
			if(stringText.equalsIgnoreCase("der") || 
				stringText.equalsIgnoreCase("die") || 
				stringText.equalsIgnoreCase("das")  )
			{
				
				
			
				
				System.out.println(stringText);
			}

equalsIgnoreCase gibt es beim StringBuilder jedoch nicht. Kann mir da jemand hier weiterhelfen. Bitte.
 
Zuletzt bearbeitet:

Syrghar

Mitglied
Hab nun folgendes:
Java:
for(int i=0; i<=stringText.length(); i++)
		{
			//Korrektur nach Punkt
			if(stringText.indexOf(".",i) == i)
			{
				//wenn nächstes Zeichen Leerzeichen -> übernächstes Zeichen groß schreiben
				if(stringText.indexOf(" ", i+1) == i+1)
				{
					char grossBuchstabe2 = Character.toUpperCase(stringText.charAt(i+2));
					stringText.setCharAt(i+2, grossBuchstabe2);	
				}
				//sonst nächstes Zeichen nach dem Punkt
				if(stringText.indexOf(" ", i+1) != i+1)
				{
					char grossBuchstabe3 = Character.toUpperCase(stringText.charAt(i+1));
					stringText.setCharAt(i+1, grossBuchstabe3);	
				}	
			}
			//Korrektur nach "der"
			if(stringText.indexOf("d",i) == i)
			{
				if(stringText.indexOf("e",i+1) == i+1)
				{
					if(stringText.indexOf("r",i+2) == i+2)
					{
						if(stringText.indexOf(" ", i+3) == i+3)
						{
							char grossBuchstabe4 = Character.toUpperCase(stringText.charAt(i+4));
							stringText.setCharAt(i+4, grossBuchstabe4);
						}
					}
				}
			}
			//Korrektur nach "die"
			if(stringText.indexOf("d",i) == i)
			{
				if(stringText.indexOf("i",i+1) == i+1)
				{
					if(stringText.indexOf("e",i+2) == i+2)
					{
						if(stringText.indexOf(" ", i+3) == i+3)
						{
							char grossBuchstabe4 = Character.toUpperCase(stringText.charAt(i+4));
							stringText.setCharAt(i+4, grossBuchstabe4);
						}
					}
				}
			}
			//Korrektur nach "das"
			if(stringText.indexOf("d",i) == i)
			{
				if(stringText.indexOf("a",i+1) == i+1)
				{
					if(stringText.indexOf("s",i+2) == i+2)
					{
						if(stringText.indexOf(" ", i+3) == i+3)
						{
							char grossBuchstabe4 = Character.toUpperCase(stringText.charAt(i+4));
							stringText.setCharAt(i+4, grossBuchstabe4);
						}
					}
				}
			}
			
			
		}
Funktioniert auch in soweit, wie die Bedingungen sind, jedoch hab ich in meinem Fehlertext auch zu Anfang eines Satzes einen Artikel. Da dort dann "Das" und nicht mehr "das" steht ignoriert er dies natürlich. Für das Beispiel zwar nicht nötig würde ich aber dennoch gerne dazu machen.

Ist es möglich das in die bestehenden Artikel if einzubauen?
Schon verschiedenes versucht, ohne Erfolg.
 

Gucky

Top Contributor
Ich glaube, es wäre einfacher, wenn du über den StringBuilder mit einer Schleife iterierst und so auf den Artikel testest.

PS: Würde dein Programm nicht auch aus "Der Mann, der groß ist" "Der Mann, der Groß ist" machen?
 

Syrghar

Mitglied
Das ist schon richtig. Es soll aber auch keine Rechtschreibprüfung sein/werden. Die Anforderung ist nach der, die, das und . das nächste Wort groß zu beginnen.

Habe mich zu Anfang mit dem StringTokenizer beschäftigt, um bei jedem Punkt in Sätze aufzuspalten.
Kann man das auch nutzen um nach max. 80 Zeichen und wenn Leerzeichen zu trennen? Habe noch das Problem max. 80 Zeichen in einer Zeile haben zu dürfen und darf auch nicht innerhalb eines Wortes in die nächste Zeile wechseln.
 

Gucky

Top Contributor
Das wird ja immer besser :D

Du könntest den String auch um der die das splitten, was mit Regex möglich ist aber ich denke, es ist einfacher, wenn du einfach über den StringBuilder iterierst und so auf den Artikel überprüfst.

max 80 Zeichen in Pseudocode:
Java:
private StringBuilder begrenzeZeilen(String str, StringBuilder sb){
  if(str.length() < 80){
    hänge str an sb an;
    return sb;
  }
  int leerzeichen;
  for(über ganz str){
    if(aktuellesZeichen ist ein leerzeichen){
      Index in leerzeichen speichern;
    }
    if (Index > 80){
      hänge substring von str von Index 0 bist Index leerzeichen an sb an;
      hänge System.getProperty("line.separator") an sb an;
      return begrenzeZeilen(Rest von str, sb);
    }
  }
}

Ist ungetestet, müsste aber funktionieren.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T String splitten Java Basics - Anfänger-Themen 3
S Nutzereingabe splitten und in string array wieder ausgeben. Java Basics - Anfänger-Themen 1
CptK Datentypen String splitten, ä,ö,ü, etc ignorieren Java Basics - Anfänger-Themen 1
J String splitten Java Basics - Anfänger-Themen 3
A String mit mehreren Zeilen splitten Java Basics - Anfänger-Themen 4
J String splitten und weiter einarbeiten in einer Methode? Java Basics - Anfänger-Themen 11
Z String splitten Java Basics - Anfänger-Themen 2
S String ab dem Wechsel Buchstaben zu Zahlen splitten Java Basics - Anfänger-Themen 14
S String splitten und in ArrayList speichern Java Basics - Anfänger-Themen 4
A String Mehrfach Splitten Java Basics - Anfänger-Themen 1
B String in in bestimmten abschnitten splitten Java Basics - Anfänger-Themen 2
H String splitten Java Basics - Anfänger-Themen 6
S String Splitten Java Basics - Anfänger-Themen 2
T String splitten Java Basics - Anfänger-Themen 2
C Methoden String richtig splitten Java Basics - Anfänger-Themen 5
C Regex String splitten Java Basics - Anfänger-Themen 5
T String splitten beim wechsel vom buchstabe zu zahl! Java Basics - Anfänger-Themen 8
2 String splitten und nacheinander löschen Java Basics - Anfänger-Themen 11
J Datentypen String splitten ohne festen Ausdruck Java Basics - Anfänger-Themen 8
T String in String Array splitten Java Basics - Anfänger-Themen 4
StrikeTom String mehrmals splitten Java Basics - Anfänger-Themen 11
S String in Integer Array splitten Java Basics - Anfänger-Themen 2
A String nach bestimmten kriterien splitten Java Basics - Anfänger-Themen 13
M String splitten mit split() Java Basics - Anfänger-Themen 4
T String splitten Java Basics - Anfänger-Themen 2
K String splitten Java Basics - Anfänger-Themen 4
S String splitten Java Basics - Anfänger-Themen 4
O String splitten Java Basics - Anfänger-Themen 9
M String splitten Java Basics - Anfänger-Themen 2
G String nach Pluszeichen splitten Java Basics - Anfänger-Themen 2
G String splitten Java Basics - Anfänger-Themen 3
T String splitten und auf fehler abfragen Java Basics - Anfänger-Themen 3
U String splitten Java Basics - Anfänger-Themen 12
J Java Aufgabe -> String einlesen, splitten,Substring & Java Basics - Anfänger-Themen 3
loadbrain String splitten Java Basics - Anfänger-Themen 3
krgewb String mit Datumsangabe in Long umwandeln Java Basics - Anfänger-Themen 2
D String Groß/Kleinschreibung Ignorieren Java Basics - Anfänger-Themen 4
D Map<String, Integer> sortieren und der reinfolge nach die Glieder abfragen Java Basics - Anfänger-Themen 3
J Ähnlichen String in Liste finden Java Basics - Anfänger-Themen 6
Kartoffel_1 String transformation Java Basics - Anfänger-Themen 7
H String-Operation replace() - Zeichenkette verdoppeln Java Basics - Anfänger-Themen 2
K String analysieren Java Basics - Anfänger-Themen 27
Beowend String zu Date parsen Java Basics - Anfänger-Themen 1
Beowend String auf Satzzeichen überprüfen? Java Basics - Anfänger-Themen 6
H Liste nach String-Länge sortieren Java Basics - Anfänger-Themen 1
String in ArrayList umwandeln Java Basics - Anfänger-Themen 1
I Sass Compiler und String erhalten? Java Basics - Anfänger-Themen 7
Avalon String in Double bzw. Währung konvertieren Java Basics - Anfänger-Themen 6
T Methode akzeptiert String nicht Java Basics - Anfänger-Themen 18
F Arraylist<String>Ein Wort pro Zeile Java Basics - Anfänger-Themen 6
J Schlüsselworte Prüfen, ob ein bestimmtes, ganzes Wort in einem String enthalten ist. Java Basics - Anfänger-Themen 6
N String überprüfen Java Basics - Anfänger-Themen 3
E String zerlegen aus args Java Basics - Anfänger-Themen 1
M Long-Typ in String-Änderung führt zu keinem Ergebnis bei großer Zahl Java Basics - Anfänger-Themen 11
Ostkreuz String Exception Java Basics - Anfänger-Themen 8
W Items löschen aus String Array vom Custom Base Adapter Java Basics - Anfänger-Themen 2
MoxMorris Wie macht man String[] = String[] aus einer anderer Methode? Java Basics - Anfänger-Themen 18
J String Filter Java Basics - Anfänger-Themen 5
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
R Größter zusammenhängender Block gleicher Zeichen im String Java Basics - Anfänger-Themen 1
XWing Randomizer mit einem String Java Basics - Anfänger-Themen 2
D 2D Char Array into String Java Basics - Anfänger-Themen 2
H Cast von Float nach String klappt nicht Java Basics - Anfänger-Themen 12
I Zerlegen von String Java Basics - Anfänger-Themen 3
B Beliebiger String gegeben Suche Datum in String Java Basics - Anfänger-Themen 6
I String Java Basics - Anfänger-Themen 4
I API - zurückgegebener JSON String lesen und in Entity konvertieren Java Basics - Anfänger-Themen 2
H Zu langen String aufteilen - bequeme Methode? Java Basics - Anfänger-Themen 14
W String einer Textdatei in einzelne Stringobjekte pro Zeile aufteilen Java Basics - Anfänger-Themen 14
belana wie am besten 2D Array von String to Integer Java Basics - Anfänger-Themen 18
J Java To String Methode, Array mit For-Schleife Java Basics - Anfänger-Themen 2
M Kommandozeilenparamter als EINEN String werten Java Basics - Anfänger-Themen 5
M RandomAccessFile int und String gleichzeitig in einer Datei Java Basics - Anfänger-Themen 49
M Prüfen on eine Zahl im String enthalten ist Java Basics - Anfänger-Themen 3
Distanz zwischen zwei Zeichenfolgen in einem String bestimmen Java Basics - Anfänger-Themen 5
Substring in einem String finden Java Basics - Anfänger-Themen 13
BeginnerJava String mit vorgegebener Länge und Buchstaben erzeugen/ mit Leerstellen Java Basics - Anfänger-Themen 8
I Eindeutiger String mit maximaler Anzahl an Zeichen Java Basics - Anfänger-Themen 11
H Interface Wieso "List<String> list = new ArrayList<>[…]" Java Basics - Anfänger-Themen 4
JavaBeginner22 Integer in String umwandeln Java Basics - Anfänger-Themen 7
HolyFUT JSON String in Java Object schreiben - Anführungszeichen rauskriegen? Java Basics - Anfänger-Themen 17
Fodoboo131 RegEx- Umwandlung von String in ausführbares Objekt/ Befehl Java Basics - Anfänger-Themen 9
HolyFUT Input/Output Leerzeichen aus String entfernen - klappt nicht! Java Basics - Anfänger-Themen 13
viktor1 Methoden Methode schreiben static void readText (String filename) {...} zu WordHistogramSample.java Java Basics - Anfänger-Themen 13
ravenz Schleife mit for über String Array „zahlen“und prüfen ob Wert „a“ oder „b“ oder „c“ entspricht (mittels || ) Java Basics - Anfänger-Themen 4
G Position einer unbekannten 3-stelligen-Zahl in einem String finden Java Basics - Anfänger-Themen 15
T String Array Fehler beim Index Java Basics - Anfänger-Themen 3
H Erste Schritte Nach einer Zahl n soll n Mal der String untereinander ausgegeben werden Java Basics - Anfänger-Themen 3
X Datentypen String.equals funktioniert nicht Java Basics - Anfänger-Themen 5
Alen123 String wiederholen mit Schleifen Java Basics - Anfänger-Themen 1
A String split funktioniert nicht, wenn mehr als 1 Ziffer vor dem Zeichen steht nach dem er trennen soll? Java Basics - Anfänger-Themen 4
sserio Schwimmen als Spiel. Problem mit to String/ generate a card Java Basics - Anfänger-Themen 4
J Datentypen String in File konvertieren funktioniert nicht Java Basics - Anfänger-Themen 4
T Platzhalter in String? Java Basics - Anfänger-Themen 14
M String mit Variable vergleichen Java Basics - Anfänger-Themen 9
I String Kombination erstellen anhand fortlaufender Zahl (Vertragsnummer) Java Basics - Anfänger-Themen 13
Fats Waller Compiler-Fehler Kann ich einen String und die Summe zweier Char Werte mittels der println Anweisung ausgeben Java Basics - Anfänger-Themen 4
M Wie kann eine Methode (string) eine andere Methode (void) mit zufälligen int-Werten aufrufen? Java Basics - Anfänger-Themen 4
P9cman Vokale in einem String überprüfen mittels Rekursion Java Basics - Anfänger-Themen 8
schredder Strings und reguläre Ausdrücke - Methode mit return string.matches Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben