Text anhand bestimmter Trennzeichen in Textteile trennen (netbeans)

Farii

Mitglied
Hallo zusammen :)
Ich habe ein Problem mit einer Aufgabe die ich in der Uni bekommen habe.

Wir sollen ein Programm in Java schreiben mit einer Klasse Texttrenner welche einen Text anhand bestimmter Trennzeichen in Textteile trennt.
Ich habe mich natürlich auch an der Aufgabe versucht aber ich komm nicht weiter. Das Programm klappt zwar so wie es da steht aber die Trennzeichen sind ja jetzt gar nicht flexibel. D.h. wenn ich z.B. nur noch als Trenner das + hab klappt das alles nicht mehr.
Kann sein das ich mich blöd anstelle aber ich komm einfach nicht weiter vielleicht hat ja jemand einen Tipp oder Lösung für mich die mir weiterhilft.
Dazu muss ich noch sagen das wir noch nicht alles verwenden dürfen. Also zB Arrays nicht.

Java:
public class TexttrennerTest {

    public static void main(String[] args) {
        
        Texttrenner a = new Texttrenner("--xx+-yy--abc-", "-+");
        
        System.out.println(a.gibNaechstesWort());
    }
    
}

Java:
public class Texttrenner {

    private String zeichenkette;
    private String trennzeichen;

    private int pointer;

    public Texttrenner(String kette, String trenner) {
        
        zeichenkette = kette;
        trennzeichen = trenner;
        pointer = 0;
    }
    
   public String gibNaechstesWort() {
        
        int start;
        int ende;
        String wort;
                
        for (int i = 0; pointer < (zeichenkette.length() - 1) 
                && zeichenkette.charAt(pointer) == trennzeichen.charAt(0)
                | zeichenkette.charAt(pointer) == trennzeichen.charAt(1); 
                i++) {
            
            
            pointer++;
        }
        start = pointer;
        
        for (int i = 0; pointer < (zeichenkette.length() - 1)
                && zeichenkette.charAt(pointer) != trennzeichen.charAt(0)
                && zeichenkette.charAt(pointer) != trennzeichen.charAt(1); 
                i++) {
            pointer++;
        }
        ende = pointer;
        
        wort = zeichenkette.substring(start, ende);
        if (start == ende) {
            wort = null;
        }
        
        return wort;
    }

Schon mal vielen dank und freundliche Grüße :)
 

Joose

Top Contributor
Das Programm geht auch davon aus das es min 2 Trennzeichen geben muss.
Wobei Texttrenner hier nicht ganz stimmt meiner Meinung nach. Es wird (soweit ich das Programm nachvollziehen konnte) immer nur das Wort zwischen den beiden Trennzeichen ausgegeben.
 

Shams

Aktives Mitglied
Hi,

ich habe Deinen Code mal laufenlassen und in das package "frageaktuell" bei mir gesetzt, was mir als erstes auffiel war, dass ja das Trennzeichen -+ in dem Code gar nicht vorkommt. Wenn e also darum geht, dass man einen Text so spaltet, dass man ein trennzeichen einer bestimmten Länge eingibt, sodass dann eben alles was nach dem Trennzeichen steht, ausgegeben wird...

...dann würde ich das so machen. Allerdings muss eventuell noch der Fall abgedeckt werden, dass das Trennzeichen so lang ist wie der zu trennende Text oder sogar länger.

Folgende Methode gibt nun, wenn das Trennzeichen im text nicht vorhandne ist, einen Leerstring zurück und alles nach dem Trennzeichen, wenn ds Trennzeichen im zu trennenden Text enthalten ist (ohne Gewähr, bitte prüfen, falls mir ein fehler unterlaufen ist):

Java:
package frageaktuell;


public class TexttrennerTest {
 
public static void main(String[] args) {
 
Texttrenner a = new Texttrenner("--xx+-yy--abc-", "+-"); //-+ war ja gar nicht enthalten in dem String "--xx+-yy--abc-".
 
System.out.println(a.gibNaechstesWort());
}
 
}
Java:
package frageaktuell;

public class Texttrenner {
    
private String zeichenkette;
private String trennzeichen;
 
private int pointer;
 
public Texttrenner(String kette, String trenner) {
 
zeichenkette = kette;
trennzeichen = trenner;
pointer = 0;
}
 
//Die Instanzvariablen brauchen getter und setter.
public String getZeichenkette() {
	return zeichenkette;
}

public void setZeichenkette(String zeichenkette) {
	this.zeichenkette = zeichenkette;
}

public String getTrennzeichen() {
	return trennzeichen;
}

public void setTrennzeichen(String trennzeichen) {
	this.trennzeichen = trennzeichen;
}

//

public String gibNaechstesWort() {
 
int start=0;
//int ende; brauchen wir gar nicht.

//Ich gehe davon aus, dass es eben ein Trennzeichen gibt, das kann in diesem Programm aber beliebig lange seinm nur nicht leer - und dann soll eben das Wort gesplittet werden.... 

if(getTrennzeichen().isEmpty()){return ""; }

for(int i=0;i<getZeichenkette().length();i+=getTrennzeichen().length()){

	//System.out.println(getZeichenkette().substring(i,(i+getTrennzeichen().length())) + " " + getTrennzeichen());
	
	if(getZeichenkette().substring(i,(i+getTrennzeichen().length())).equals(getTrennzeichen())){
		start = i;
		break;
	}
	
}
 
 
return getZeichenkette().substring(start+getTrennzeichen().length());
   }
}
 

Joose

Top Contributor
@Shams: Wie ich schon geschrieben habe ist das Programm nicht wirklich zum Trennen geeignet sondern um alle Wörter zwischen den angegebenen Zeichen zu finden.
 

Farii

Mitglied
So sorry vielleicht wurde es falsch verstanden. Mit dem -+ sind zwei Trenner gedacht. Da könnte auch ein leerzeichen und ein punkt drin stehen. Das stand so in der aufgabe...
Also es soll da getrennt werden wo so etwas vorkommt und dann das wort ausgeben. Zum beispiel: "Hallo Forum", " " -> erstes wort "hallo" wenn man die methode nochmal aufruft soll da stehen "forum".. das klappt ja jetzt auch. Das problem ist wenn ich wie hier grade nur ein trenn-zeichen habe muss es auch klappen oder halt mehr..
 
Zuletzt bearbeitet:

Shams

Aktives Mitglied
Ich habe die texttrennerklasse nun derart erweitert, dass er folgendes tut. Er schaut sich jedes einzelne Zeichen im übergebenen Trennzeichenstring an, und sobald er sieht, dass im zu trennenden Wort ein solches Zeichen vorkommt, gibt er eben das "Folgewort" rechts davon aus (ohne Rücksicht darauf, ob es dort auch Trennzeichen drinne gibt) (ohne Gewähr, dies soll nur ein Denkanstoß sein):


Java:
import java.util.*;
     
    public class Texttrenner {
     
    private String zeichenkette;
    private String trennzeichen;
     
    private int pointer;
     
    public Texttrenner(String kette, String trenner) {
     
    zeichenkette = kette;
    trennzeichen = trenner;
    pointer = 0;
    }
     
    //Die Instanzvariablen brauchen getter und setter.
    public String getZeichenkette() {
    return zeichenkette;
    }
     
    public void setZeichenkette(String zeichenkette) {
    this.zeichenkette = zeichenkette;
    }
     
    public String getTrennzeichen() {
    return trennzeichen;
    }
     
    public void setTrennzeichen(String trennzeichen) {
    this.trennzeichen = trennzeichen;
    }
     
    
    public String gibNaechstesWort() {
     

    ArrayList<String> res = new ArrayList<>();//Ich habe also mehrere Startpunkte, welche die Teilwörter begrenzen.
   TreeSet<Integer> start = new TreeSet<>();
     
    if(! getTrennzeichen().isEmpty()){
     
    for(char zeichen : getTrennzeichen().toCharArray()){
    	
    	int ind = 0;
    	for(char letter : getZeichenkette().toCharArray()){
    		if(zeichen == letter){
    			
    			start.add(ind);
    	
    		}
    	ind++;
    	}  	
       }	
    }  
    
  
   for (Integer s : start){

	   //System.out.println(s);
      res.add(getZeichenkette().substring(s+1));

 
}
   
   
   return res.toString();
 
   
    }
    }
 
Zuletzt bearbeitet:

Foxei

Bekanntes Mitglied
Also ich weiß nicht ob es schon zuspät ist aber ich habe das einfach anders gelöst.
Ich erzeuge ein Array in dem die Position der möglichen Splitter in den eingegeben Satz gespeichert werden. Danach lasse ich einfach nur noch diese eingeschlossenen bereiche ausgeben und Fertig. Dieser Code Funktioniert einwandfrei :D allerdings bin ich schon sehr weit von dem gegeben Ansatz weg :bahnhof:
Java:
package Zeichentrenner;

import java.util.ArrayList;
import java.util.List;

public class Zeichenstrenner {
    public static void main(String[] args) {
    	new Zeichenstrenner("--++Haus++Baum-Auto+","-+");	//Übergibt wie bekannt Satz und Splitter
    }
    
    private String sentence; //Satz der Getrennt werden soll
    private char[] splitter; //Array der möglichen Splitter
    private List<Integer> splitterPosition=new ArrayList<Integer>(); //Positionen der möglichen Splitter im Satz
    private int position=0; //Position im Array des momentanen Wortes
    
    public Zeichenstrenner(String sentence,String splitter) {
    	this.sentence=sentence;
    	this.splitter=splitter.toCharArray();
    	generateSplitterPositions();
    	ausgabe();
	}
    
    /*
     * Generiert die Positionen der Splitter in dem er im Satz nach den angegeben Splittern sucht un diese Speichert
     */
	private void generateSplitterPositions() {
		for(int i=0;i<sentence.length();i++){
			char c=sentence.toCharArray()[i];
			for(char d:splitter){
				if(c==d)
					splitterPosition.add(i);
			}
		}
		System.out.println("Splitter Positions found: "+splitterPosition.toString());
	}
	
	/*
	 * Gibt die wörter aus bis es keine mehr gibt und die Methode hasNextWord() false ist
	 */
	private void ausgabe() {
		String word=getNextWord();
		while(hasNextWord()){
			System.out.println(word.isEmpty()?"Word: <isEmpty>":"Word: "+word);
			word=getNextWord();
		}
		System.out.println("No more Words left");	
	}
	
	/*
	 * Gneriert eine Substring von der im SplitterPostion angeben postition zur nächsten in diesem Array angegeben Position
	 */
	private String getNextWord() {
		System.out.println("Splitter Position: "+position);
		String word=sentence.substring(splitterPosition.get(position), splitterPosition.get(position+1)+1);
		for(char c:splitter){
			word=word.replace(c+"", ""); //Substring ist immer mit den Splittern die es einschließen also diese Löschen
		}
		System.out.println("Next Word from: "+splitterPosition.get(position)+" to "+splitterPosition.get(position+1));
		position++;
		return word;
	}
	
	private boolean hasNextWord(){
		if(splitterPosition.size()>1&&splitterPosition.size()>position+1)
			return true;
		return false;
	}
 
}

bei Fragen immer gerne.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
richis-fragen JTable effektiv angezeigter Text ausgeben nicht Inhalt vom Model Java Basics - Anfänger-Themen 9
A Edit Text Negative Decimalzahlen Java Basics - Anfänger-Themen 18
P Aus Text Datei nur Zahlen übernehmen Java Basics - Anfänger-Themen 13
T Text einlesen code was kommt dahin? Java Basics - Anfänger-Themen 1
R Text in der DB abspeichern, und danach bearbeiten Java Basics - Anfänger-Themen 5
A JTextArea entfernen und durch neuen Text ersetzen Java Basics - Anfänger-Themen 8
JavaBeginner22 Button Text verändern Java Basics - Anfänger-Themen 1
GoenntHack Java Text von JLabel verändert sich nicht Java Basics - Anfänger-Themen 1
A Text zu Morsecode Java Basics - Anfänger-Themen 8
O Java Text Area Zeilenausgabe Java Basics - Anfänger-Themen 7
M Text wird in der Console nicht ausgegeben. Java Basics - Anfänger-Themen 11
berserkerdq2 An selbst ersteller txt Datei immer Text dranhängen, ohne den vorherign Text zu löschen Java Basics - Anfänger-Themen 8
M Text in Datei schreiben Java Basics - Anfänger-Themen 9
T208 Text Datei individuell benennen. Java Basics - Anfänger-Themen 5
A Werten aus dem Text ausliesten Java Basics - Anfänger-Themen 6
K Jlabel mit itemlistevent Text gegeben, wird nicht angezeigt Java Basics - Anfänger-Themen 5
Kiki01 Wie würde eine geeignete Schleife aussehen, die die relative Häufigkeit für jeden Charakter in einem Text bestimmt? Java Basics - Anfänger-Themen 3
O Text mit Regex trennen und wieder zusammenbauen Java Basics - Anfänger-Themen 5
xFlozen Text mehrspaltig ausgeben Java Basics - Anfänger-Themen 3
S Zufällige ungerade Zeile aus Text-Datei lesen Java Basics - Anfänger-Themen 5
K Rekursiver Vergleich von Textmuster und Text Java Basics - Anfänger-Themen 2
C Variablen Provided text for message may not be null Java Basics - Anfänger-Themen 9
H Klassen Die Länge einer Text-Node bestimmen Java Basics - Anfänger-Themen 2
F Erste Schritte java.util.Scanner: Beliebig langen Text per Paste in Console eingeben ? Java Basics - Anfänger-Themen 14
GermanPie Discord Text Channel erstellen? Java Basics - Anfänger-Themen 1
C JButton Text 2 Mal ändern funktioniert nicht Java Basics - Anfänger-Themen 8
yoskaem Text Color durch Klicken eines Buttons in anderer Activity ändern Java Basics - Anfänger-Themen 2
B Alle Links in einem Text suchen und ersetzen mit einem neuen Link Java Basics - Anfänger-Themen 18
J Java TextArea Text bei hinzufügen makieren Java Basics - Anfänger-Themen 1
T Text-Ausgabe für Textadventure - Organisation Java Basics - Anfänger-Themen 5
G Anklickbaren Text erzeugen Java Basics - Anfänger-Themen 2
B Text-Datei nur in Stream speichern und dann ausgeben Java Basics - Anfänger-Themen 3
M Java: BufferedReader liest nur die Hälfte der Text-Datei. Java Basics - Anfänger-Themen 4
M Apache POI PPT - Vertikales Alignment von Text im XSLFAutoShape Java Basics - Anfänger-Themen 2
I Nur auf Abfrage von einer Text Datei einlesen Java Basics - Anfänger-Themen 11
P Text Datei einlesen und übertragen Java Basics - Anfänger-Themen 15
P Taschenrechner Text übertragung Java Basics - Anfänger-Themen 3
J java.text.DecimalFormat Java Basics - Anfänger-Themen 5
AnnaBauer21 GridBagLayout JLabel weightx: Unterschiedliche Breite mit & ohne Text Java Basics - Anfänger-Themen 6
K Durch eine Text eingabe etwas Ausführen Java Basics - Anfänger-Themen 5
S Text-To-Speech mit Java Java Basics - Anfänger-Themen 2
L Text-Adventure Java Basics - Anfänger-Themen 3
M Input/Output Java Swing: Prüft ob Text aus JTextField ausschließlich Integer enthält Java Basics - Anfänger-Themen 15
ruutaiokwu Ausgegebene Zeile ersetzen mit neuem Text Java Basics - Anfänger-Themen 3
tsom Erste Schritte itext Text als Block auf neue Seite Java Basics - Anfänger-Themen 0
Dimax Programme ,als Text in MySql speichern Java Basics - Anfänger-Themen 7
CptK Datentypen Text Dateien einlesen Java Basics - Anfänger-Themen 3
Harlequin Compiler-Fehler Text Adventure - "Long Output" Fehler Java Basics - Anfänger-Themen 3
S Zeichen zählen kopierter Text Java Basics - Anfänger-Themen 6
D Text als Code in java-forum.com formatieren. Wie ? Java Basics - Anfänger-Themen 3
F Schreibprogramm nur markierten Text in kursiv oder fett schreiben Java Basics - Anfänger-Themen 3
A Rechnen mit Text und Zahl Java Basics - Anfänger-Themen 4
MaximilianTM Input/Output Einlesen und bearbeiten einer text Datei / Zeile Java Basics - Anfänger-Themen 5
M Erste Schritte Verschlüsselung von text Java Basics - Anfänger-Themen 21
S Text aus einer HTML Datei auslesen Java Basics - Anfänger-Themen 1
S Java Text splitten mit Tabs, Zeilen, Zeichen und Klammern. Java Basics - Anfänger-Themen 6
M Beliebigen Text in *** umwandeln Java Basics - Anfänger-Themen 15
K (JTable) Text einer Zelle auf der linken Seite kürzel Java Basics - Anfänger-Themen 2
H Suche in Text und Markierung Java Basics - Anfänger-Themen 14
H Suche in einem Text Java Basics - Anfänger-Themen 17
F Input/Output Text einlesen lassen Java Basics - Anfänger-Themen 14
L Text eingeben und im Textfeld auslesen lassen Java Basics - Anfänger-Themen 2
R Best Practice Palindrom in einem Text finden Java Basics - Anfänger-Themen 18
J Text Datei einlesen Java Basics - Anfänger-Themen 6
L Text und Ganzzahl in einer Dialogbox Java Basics - Anfänger-Themen 5
D Text Adventure Erstellen Java Basics - Anfänger-Themen 10
T Jlabel durch Text in 2 anderen Jlabels sichtbar machen Java Basics - Anfänger-Themen 4
J JTextArea visible ohne Text Java Basics - Anfänger-Themen 3
D Bild zu Text Java Basics - Anfänger-Themen 4
L Text/Befehle zu Programmen senden Java Basics - Anfänger-Themen 1
L Java Text datei nur bis zu einem Punkt auslesen? Java Basics - Anfänger-Themen 3
T Classpath Problem mit dem auslesen von Text-Dateien (Pfad) Java Basics - Anfänger-Themen 3
S Erste Schritte Sprachermittler - Datei öffnen, Text in TextArea, Bereinigen, Auswerten Java Basics - Anfänger-Themen 14
S Java Label hat komischen text Java Basics - Anfänger-Themen 4
S Ausgabe von Text Formatieren Java Basics - Anfänger-Themen 6
H Text in einen Button quetschen Java Basics - Anfänger-Themen 3
A Text mit "Scanner" eingeben und Umlaute ersetzen Java Basics - Anfänger-Themen 7
A Text teilen und Wörter zählen Java Basics - Anfänger-Themen 7
J Zahlen als Text übersetzen Java Basics - Anfänger-Themen 6
F Erste Schritte Label Text vor Methodenaufruf setzen Java Basics - Anfänger-Themen 17
R Text Pane Aktualisierung erst nach JOptionPane Java Basics - Anfänger-Themen 10
I BufferedReader Text-Datei einlesen??? Java Basics - Anfänger-Themen 1
S Wort in Text suchen und ersetzen Java Basics - Anfänger-Themen 3
V Interface ich schäme mich das zu fragen, aber ich schaff nicht ein Text zu zentrieren :( [javaFX] Java Basics - Anfänger-Themen 6
M Input/Output Text auf Fenster zeichen Java Basics - Anfänger-Themen 2
W Klassen Fehler bei public void setLabelText(JLabel label, String text) Java Basics - Anfänger-Themen 11
Chava Testprojekt.Text.Image.Button Java Basics - Anfänger-Themen 4
Z JSlider - Text wird nich angezeigt Java Basics - Anfänger-Themen 0
A Problem mit set.Text und übergabe Java Basics - Anfänger-Themen 2
A Probleme mit equals und get.Text Java Basics - Anfänger-Themen 12
M Text innerhalb Anführungsstriche als "eins" auswerten Java Basics - Anfänger-Themen 5
V Text aus einer .txt dynamisch ins applet einpassen Java Basics - Anfänger-Themen 0
H Text durch Checkbox erscheinen lassen Java Basics - Anfänger-Themen 2
U markierten Text auf Zeichen zuvor/danach pruefen Java Basics - Anfänger-Themen 9
J Dienst zum Text kopieren und Variable hochzählen Java Basics - Anfänger-Themen 7
L Text verschlüsseln Java Basics - Anfänger-Themen 13
M Button mit Bild und Text Java Basics - Anfänger-Themen 2
V Text wüerfeln-Rekursiv Java Basics - Anfänger-Themen 4
S Text editors popularity among programmers Java Basics - Anfänger-Themen 0
L Methoden String text komprimieren und dekomprimieren Java Basics - Anfänger-Themen 14

Ähnliche Java Themen

Neue Themen


Oben