text durchsuchen -> satzzeichen entfernen

Status
Nicht offen für weitere Antworten.

hdi

Top Contributor
hallo,

das ist etwas schwer zu erklären, ich will euch jetzt auch nicht mit meinem trash code langweilen.

mein problem: ich zähle wörter in einem text, und kriege es irgendwie nicht hin, satzzeichen wegzuschneiden.

ich habe es schon versucht, mittels (ein beispiel für ein wort dass einen satz beendet, also mit "." aufhört) :

Code:
if(word.contains("."){
   word = word.substring(0,word.length()-1);
}

wenn ich mir jetzt das ergebnis nach diesem schritt ausgeben lasse, wurde tatsächlich aus zB "hallo." ein "hallo"
gemacht.

ABER:

wenn ich nun ein "hallo" in dem text mittels equals() vergleiche mit einem ursprünglichen "hallo." aus dem mit
der oben genannten bearbeitung ein "hallo" gemacht habe, kommt FALSE heraus..

also irgendwas passt da nicht. wieso?

danke
 
> wieso?

weil du keinen Code postest..

selbstverständlich funktioniert es, anderenfalls ist noch ein Leerzeichen drin oder ein beliebiger anderer Fehler

wann immer du glaubst, zwei gleiche Strings zu haben, deren equals false ergibt,
ist das kinderleicht nachzuprüfen:
Länge der beiden Strings vergleichen/ ausgeben sowie jeden char als ASCII-Code in einer Schleife prüfen

-------

> if(word.contains("."){

gefährliche Sache, der Punkt muss ja nicht am Ende des Strings sein..
(gibt auch string.endsWith())
 
danke erstmal für den tipp mit endsWith(), habe das nun ersetzt!

Ich möchte halt nicht nur euch zumüllen mit meinem Code, sondern versuche erst selber herauszufinden
woran es liegt um euch dann nur diesen Teil zu präsentieren.

Aber scheinbar irre ich mich, dann poste ich jetzt doch meinen Code. Wie ich sagte, ist es etwas chaotisch.
Also es sieht so aus:

Code:
            fr = new BufferedReader(new FileReader("C:/analyze.txt"));
            while ((line = fr.readLine()) != null) {

                laca = line.toCharArray();
                int j=0;
                for (int i = 0; i < laca.length; i++) {
                    if (laca[i] == ' ' || laca[i] == '!' || laca[i] == '?' || laca[i] == '.' ||
                            laca[i] == ',' || laca[i] == '-' || laca[i] == '\"' || laca[i] == '\'') {  
   
                        // Es wurde ein Satzzeichen im String gefunden, d.h. alles von Anfang bis zu dieser Stelle
                        // ist ein Wort. Nun wird noch das Satzzeichen entfernt und das Wort gespeichert:

                        word = line.substring(i-j, i+1); 

                        // wort bearbeiten (punkte, komma etc wegschneiden)
                        if(word.endsWith(".") || word.endsWith("!") ||  word.endsWith("?") ||
                          word.endsWith(",")  ||  word.endsWith("-")  ||  word.endsWith("\"") ||  word.endsWith("\'")){
                            
                            word = word.substring(0,word.length()-1);
                        }

                       // hier wird jetzt etwas mit dem wort gemacht, ich füge es zB in eine liste ein und fertig

                        // nachdem dieses Wort gefunden wurde, wird j wieder 0 gesetzt um für den weiteren Verlauf
                        // des Line-Strings wieder zu wissen, wo das neue Wort begonnen hat:
                        j = 0;
                        }
                    }
                    else{
                       // wird hochgezählt, solange ein Wort nicht abgeschlossen ist, um zu wissen wo das Wort
                       // begonnen hat bzw. wie lang es ist (um den richtigen substring zu finden!)
                        j++;
                    }
                }
                
            }

So, also habe alles kommentiert, ich hoffe man versteht es.
Ich speichere ja alle Wörter in eine Liste, die ich mir am Ende ausdrucke. Dort stehen dann alle Wörter
und daneben die Anzahl ihrer Vorkommen (diesen Teil hab ich jetzt hier weggelassen).

EDIT
Ich habe jetzt rumprobiert, und festgestellt, dass bei dem einen hallo wo ein punkt dran war, kein leerzeichen
mehr zum string gehört, was bei allen anderen string der fall ist! Deshalb hänge ich in dem fall einfach
ein " " an und damit ist das also GELÖST!

Aber es gibt weiterhin ein Problem:

Das letzte Wort wird nie bearbeitet, ich denke es liegt daran dass mir oben in der Abfrage:

Code:
   if (laca[i] == ' ' || laca[i] == '!' || laca[i] == '?' || laca[i] == '.' ||
                            laca[i] == ',' || laca[i] == '-' || laca[i] == '\"' || laca[i] == '\'') {

noch das END OF FILE fehlt, also er erkennt beim letzten wort keinerlei abschlusszeichen und speicher somit
kein wort. Aber wie kann ich das überrpüfen, gibts da auch ein Terminalsymbol dafür als Char?
 
String newString = oldString.replace(".","");
ersetzt alle Punkte durch einen leeren String...
ist denke ich mal eine viel bessere lösung als die, die du gemacht hast. Bei dir werden sie schleißlich nur enfernt, wenn sie am schluss stehen
 
Also das mit den Punkten funktioniert schon soweit, auch "..." etc werden rausgefilert.

Ich hab jetzt nur noch 2 Probleme:

1) Was ist das Char-Escape Zeichen für End Of File, bzw. wie kann ich es anders lösen dass auch das letzte Wort noch mitgenommen wird?

2) Ich habe eigentlich Zeichen wie " und ' herausgenommen, allerdings ist es so dass im Text
andere Versionen davon vorkommen können.
zB:

WORLD’S

Dieses Apostroph da kann man in im Editor nicht schreiben, man kann ´ schreiben, aber das sieht ja
anders aus und es funktioniert auch nicht. Dann zB noch so kursive Dinge wie ”, das geht auch nicht nur "

In der ASCII Tabelle finde ich diese Zeichen irgendwie auch nicht.. Also wie kann ich die rausfiltern??

danke
 
letztes Wort innerhalb einer Zeile:
prüfe i == laca.length-1

letze Zeile:
lies alle Zeilen vorher in eine Liste ein oder zumindest immer eine Zeile im Vorraus, damit du weißt, wann die letzte erreicht ist
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben