Strings vergleichen & sortieren

Hannek92

Mitglied
Momentan bin ich an einem Programm dran, das einen String einließt und danach die Wörter in alphabetischer Reihenfolge ausgeben soll und sagen soll, wie oft das einzelne Wort vor kam.
Also z.B. soll hallo ich hallo als Ausgabe hallo: 2 , ich : 1 haben.

ich dachte, das ich als erstes die Wörter wohl in ein String Array packe. Danach wollte ich schauen, wie oft ein bestimmtes Wort vorhanden ist. Mein Problem ist, dass ich das String array auch noch sortieren muss, denn momentan kriege ich als Ausgabe hallo: , ich : 1, hallo:1 ..

Wie kann ich denn jetzt das String Array sortieren ? Ich habe gegoogelt, dass es die Methode Arrays.sort gibt, aber die dürfen wir nicht benutzen :/
Soweit sieht mein Code aus, habt ihr Vorschläge für die Sort Methode ?

Java:
public class Stringent{
    public static void devide(String s) {
        String [] wort = s.split(" ");
        int count = 1;
     
        String wortJetzt = wort[0];
        for (int i = 1; i < s.length(); i++ ) {
         
                if ( wort[i].equals(wortJetzt)) {
                    count++;
                } else {
                    System.out.println(wort[i] +" "+ " : " + count + "\n");
                    wortJetzt = wort[i];
                    count = 1;
                }
         
         
        }   System.out.println(wortJetzt+" kommt "+count+" mal vor.");
    }

 
 
    public static void main (String[] args) {
        Scanner scan = new Scanner(System.in);
        String st = scan.nextLine();
        devide(st);
    }
}
 

Hannek92

Mitglied
meinst du dann so ?
Java:
public static void sort ( String []  str) {
       
    for( int i = 1; i < str.length-1; i++) {
        for( int j = 0; j < str.length; i++) {
            int compare= str[i].compareTo(str[j]);
           
            if ( compare > 0) {
                String temp = str[i];
                str[i] = str[j];
                str[j] = str[i];
            }
        }
    }
}

kriege da jetzt arrayindexoutofbounds :/
 

Hannek92

Mitglied
oh ja stimmt.. danke :D ändert aber leider nichts an meiner ausgabe :/

meine beiden Methoden sehen so aus.. siehst du zufällig, wo mein fehler ist?
Java:
    public static void devide(String s) {
        String [] wort = s.split(" ");
        sort(wort);
        int count = 1;
       
        String wortJetzt = wort[0];
        for (int i = 1; i < s.length(); i++ ) {
           
                if ( wort[i].equals(wortJetzt)) {
                    count++;
                } else {
                    System.out.println(wort[i] +" "+ " : " + count + "\n");
                    wortJetzt = wort[i];
                    count = 1;
                }
           
           
        }   System.out.println(wortJetzt+" kommt "+count+" mal vor.");
    }
   
public static void sort ( String []  str) {
       
    for( int i = 1; i < str.length-1; i++) {
        for( int j = 0; j < str.length; j++) {
            int compare= str[i].compareTo(str[j]);
           
            if ( compare > 0) {
                String temp = str[i];
                str[i] = str[j];
                str[j] = str[i];
            }
        }
    }
}
 

javampir

Bekanntes Mitglied
am besten sagst du die zeile, wo deine arrayindexoutofboundsexception ist.
außerdem sieht das am ende von sort nach einem nicht gelungenen ringtausch aus, bist du sicher, dass die letzte zeile nicht str[j] = temp heißen muss?
 

Hannek92

Mitglied
ja, du hast vollkommen recht.. muss wohl langsam eine pause vom lernen machen :/ will das hier nur noch hinkriege... die Exceptions habe ich im code mit hier markiert

Java:
import java.util.Scanner;
import java.util.Arrays;
public class Stringent{
    public static void devide(String s) {
        String [] wort = s.split(" ");
        sort(wort);
        int count = 1;
      
        String wortJetzt = wort[0];
        for (int i = 1; i < s.length(); i++ ) {
          
                if ( wort[i].equals(wortJetzt)) { // HIER
                    count++;
                } else {
                    System.out.println(wort[i] +" "+ " : " + count + "\n");
                    wortJetzt = wort[i];
                    count = 1;
                }
          
          
        }   System.out.println(wortJetzt+" kommt "+count+" mal vor.");
    }
  
public static void sort ( String []  str) {
      
    for( int i = 1; i < str.length-1; i++) {
        for( int j = 0; j < str.length; j++) {
            int compare= str[i].compareTo(str[j]);
          
            if ( compare > 0) {
                String temp = str[i];
                str[i] = str[j];
                str[j] = temp;
            }
        }
    }
}

    public static void main (String[] args) {
        Scanner scan = new Scanner(System.in);
        String st = scan.nextLine();
        devide(st); // HIER
    }
}
 

javampir

Bekanntes Mitglied
muss kurz vor dem oberen hier
Java:
for(int i = 0; i < str.length() - 1; i++) {
sein
 

JStein52

Top Contributor
In deinem sort ist auf jeden Fall ein Fehler. Aus diesem String-Array:
Hallo Halli und Tschuess

macht der sort dieses:

Hallo Halli Halli Tschuess

Überdenke den sort nochmal :):)
 

JStein52

Top Contributor
Und du meintest in der einen Schleife sicher nicht "for (int i = 1; i < s.length(); i++ ) {"
sondern for (int i = 1; i < wort.length; i++ ) {
 

Hannek92

Mitglied
den fehler mit wort.length, den habe ich gerade auch gefunden und schon behoben.. :) jetzt muss ich nur gucken, was an der sort-methode nicht richtig läuft :D
 

black swan

Mitglied
Ich glaube, dass Du in Zeile 10 den falschen Zähler verwendest: Du möchtest doch über alle Wörter gehen und nicht über alle Zeichen, oder?
Java:
s.length() // liefert Anzahl der Zeichen, nicht Anzahl der Wörter

Update: Uuups, zu langsam! ;-)
 

JStein52

Top Contributor
Kleine Hilfe, schau dir mal das an:

INSERTIONSORT(A)
1 for k ← 2 to Länge(A) do
2 ....einzusortierender_wert ← A[k]
3 ....j ← k
4 ....while j > 1 and A[j-1] > einzusortierender_wert do
5 ........A[j] ← A[j - 1]
6 ........j ← j − 1
7 ....A[j] ← einzusortierender_wert

Wobei bei diesem Pseudocode die Nummerierung der Elemente in A bei 1 beginnt !!!

Edit: Einrückungen wäre noch gut :):):)
 
Zuletzt bearbeitet:

Hannek92

Mitglied
meinst du das so? also ich hab das jetzt mit zwei for schleifen gemacht.. aber sollte ja das gleiche machen, außer ich hab deinen pseudocode jetzt falsch verstanden ..

Java:
public static void sort ( String []  str) {
     
    for( int i = 1; i < str.length; i++) {
        for( int j = i; j > 0 ; j--) {
            int compare= str[j].compareTo(str);
         
            if ( compare > 0) {
                String temp = str[j];
                str[j] = str[j-1];
                str[j-1] = temp;
            }
        }
    }
}

also bei einer ausgabe von ich auch ich .. wird als erstes auch ausgegeben und dann ich.. nur das ich wird nur einfach ausgegeben..
 

Hannek92

Mitglied
ah ne funktioniert doch nicht... ich glaub ich muss einfach kurz ne pause machen und schau mir das gleich noch mal an, bevor ich euch noch mit mir quälen müsst :D
 

JStein52

Top Contributor
Nein, so:

Code:
public static void sort ( String []  str) {
     
    for( int i = 1; i < str.length; i++) {
        String temp = str[i];
        int j = i;
        while( j > 0 && (str[j-1].compareTo(temp)) > 0) {
                str[j] = str[j-1];
                j = j-1;
        }
        str[j] = temp;
    }
}

Sorry, ich hatte vorhin Schwierigkeiten mit den Einrückungen

Edit: nur Mut, das kriegst du heute noch !
 

JStein52

Top Contributor
Übrigens, ich glaube deines wäre auch beinahe gegangen. Sollte es nicht so aussehen:

Code:
public static void sort ( String []  str) {
   
    for( int i = 1; i < str.length; i++) {
        String temp = str[i];
        int j;
        for(j = i; j > 0 ; j--) {
            int compare= str[j-1].compareTo(temp);
       
            if ( compare > 0) {
                str[j] = str[j-1];
            } else {
                 break;
            }
        }
        str[j] = temp;
    }
}

Aber Achtung: ich habe diese Version nicht getestet, nur meine von vorhin. Überlasse ich dir :):)
 

Hannek92

Mitglied
kurze Frage: also für meine bevorstehende Klausur hatte ich mir auch mal so verschiedene Sortieralgorithmen angeschaut, bzw gelernt. Beim InsertionSort hatte ich halt diese Variante für ein integer array und das hat auch funktioniert.. ist das jetzt gar kein richtiger InsertionSort-Algorithmus? Weil diese Variante hatte ja, wie gerade gesagt bei dem String array nicht funktioniert. Und kann man für String Arrays nicht die gleichen Sortieralgorithmen nehmen, wie für IntegerArrays?

Java:
public static int [] insert ( int [] a){
        for (int i = 1; i < a.length; i++) {
            for ( int j = i; j > 0 ; j--) {
                if( a[j] < a[j-1] ) {
                    int temp = a[j-1];
                    a[j-1] = a[j];
                    a[j] = temp;
                }
            }
        } return a;
    }

Deine Variante funktioniert übrigens!:)
 

JStein52

Top Contributor
Doch klar kann man für Strings die gleichen Algorithmen nehmen. Nur die Vergleichsoperation ist halt spezifisch für das was man sortiert. Und deines war natürlich auch ein Insertion Sort. Das charakteristische für einen Insertion Sort ist folgendes:
Insertionsort entnimmt der unsortierten Eingabefolge ein beliebiges Element und fügt es an richtiger Stelle in die (anfangs leere) Ausgabefolge ein. Geht man hierbei in der Reihenfolge der ursprünglichen Folge vor, so ist das Verfahren stabil. Wird auf einem Array gearbeitet, so müssen die Elemente hinter dem neu eingefügten Element verschoben werden.
Und natürlich kann man das mit verschiedenen Schleifenkonstrukten auch verschieden gestalten. Ich könnte mir im Moment nur vorstellen dass die Version die du oben für Strings und für Integer gepostet hast eben doch nicht gleich sind (auf den ersten Blick sehe ich da verschiedene Indizes usw. ) Wenn es dich genau interessiert versuche doch nochmal die Integer-Version auch wirklich 1:1 für Strings umzusetzen.
 

Hannek92

Mitglied
ah okay, ganz lieben Dank für deine Antwort :) Java verwirrt mich sehr schnell und da ich das vorher mit dem compareTo noch nicht hatte, war das noch verwirrender :D
Hab es jetzt auch endlich geschafft, das Programm so zum laufen zu kriegen, wie es sein soll :D
Ganz ganz lieben Dank :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Strings mit compareto vergleichen und array sortieren Java Basics - Anfänger-Themen 14
A 2 Strings vergleichen in einer methode wenn man mit Globalen variablen arbeitet Java Basics - Anfänger-Themen 12
M Strings vergleichen Java Basics - Anfänger-Themen 10
S 2 Strings mit Equals vergleichen Java Basics - Anfänger-Themen 11
D Vergleichen von Strings Java Basics - Anfänger-Themen 6
J Strings untereinander in einer Liste vergleichen Java Basics - Anfänger-Themen 18
N Zwei Strings mit "==" vergleichen warum TRUE Java Basics - Anfänger-Themen 2
F JList Elemente mit Strings vergleichen Java Basics - Anfänger-Themen 12
L Rekursiv zwei Strings vergleichen Java Basics - Anfänger-Themen 3
J Algorithmus - Strings auf eigene Reihenfolge miteinander vergleichen Java Basics - Anfänger-Themen 4
R illegal start of expression - 3 Strings vergleichen mit .equals () Java Basics - Anfänger-Themen 5
S Strings miteinander vergleichen Java Basics - Anfänger-Themen 5
1 HILFE! Strings mit CompareTo vergleichen Java Basics - Anfänger-Themen 3
B Variablen Unbekante anzahl an Strings splitten und vergleichen Java Basics - Anfänger-Themen 31
M Zwei Strings vergleichen? Java Basics - Anfänger-Themen 10
C Datentypen Mehrere Strings vergleichen Java Basics - Anfänger-Themen 5
W Strings vergleichen Java Basics - Anfänger-Themen 2
L Strings vergleichen Java Basics - Anfänger-Themen 17
B mehrere Strings vergleichen Java Basics - Anfänger-Themen 24
G Strings vergleichen mit equals, geht das kürzer? Java Basics - Anfänger-Themen 4
A Datentypen strings vergleichen Java Basics - Anfänger-Themen 9
G Strings vergleichen Java Basics - Anfänger-Themen 14
C Strings vergleichen mit == Java Basics - Anfänger-Themen 6
J Strings in charArrays umwandeln und vergleichen Java Basics - Anfänger-Themen 4
T Strings vergleichen Java Basics - Anfänger-Themen 5
X Strings mit If vergleichen Java Basics - Anfänger-Themen 5
P Strings über whitelist vergleichen Java Basics - Anfänger-Themen 14
Q Zwei Strings vergleichen Java Basics - Anfänger-Themen 14
N 2 Strings vergleichen Java Basics - Anfänger-Themen 4
G Strings vergleichen Java Basics - Anfänger-Themen 6
K Strings vergleichen funktioniert nicht Java Basics - Anfänger-Themen 3
S Strings miteinander vergleichen Java Basics - Anfänger-Themen 12
D Strings vergleichen, Problem "" Zeichen? Java Basics - Anfänger-Themen 3
T Strings bis zum Zeichen ";" vergleichen! Java Basics - Anfänger-Themen 6
U Strings vergleichen Java Basics - Anfänger-Themen 2
S Von der Tastatur eingelesene Strings miteinander vergleichen Java Basics - Anfänger-Themen 4
G Strings vergleichen: Unterschiede erfragen Java Basics - Anfänger-Themen 5
T Länge von Strings im Array vergleichen Java Basics - Anfänger-Themen 2
N Strings vergleichen die 2te. Java Basics - Anfänger-Themen 8
D Rekursiv 2 Strings vergleichen Java Basics - Anfänger-Themen 14
L Strings vergleichen wie in SQL mit "Like" Java Basics - Anfänger-Themen 3
G Fehlertoerantes Vergleichen von Strings? Java Basics - Anfänger-Themen 13
G die ersten Zeichen eines Strings Vergleichen mit String Java Basics - Anfänger-Themen 6
W mehrere Strings vergleichen, (kein equal-Problem) Java Basics - Anfänger-Themen 3
S Warum Strings mit equals vergleichen? Java Basics - Anfänger-Themen 6
S 100%iges Vergleichen von 2 Strings Java Basics - Anfänger-Themen 18
S Vergleichen von Strings Java Basics - Anfänger-Themen 6
M Strings vergleichen Java Basics - Anfänger-Themen 3
B Strings vergleichen Java Basics - Anfänger-Themen 2
M Strings vergleichen Java Basics - Anfänger-Themen 3
D Strings vergleichen Java Basics - Anfänger-Themen 4
J Strings vergleichen Java Basics - Anfänger-Themen 2
Dilandau strings vergleichen? Java Basics - Anfänger-Themen 3
W Gleichzeitiges ersetzen mehrerer Strings Java Basics - Anfänger-Themen 7
R Datentypen Das Verhalten von Strings als Datentypen Java Basics - Anfänger-Themen 7
N Nachkommastellen von Strings Java Basics - Anfänger-Themen 3
T Strings unveränderlich???? Java Basics - Anfänger-Themen 22
B Alle Strings bis zu einer Maimallänge aufzählen, die Bedingung erfüllen Java Basics - Anfänger-Themen 13
S Die durchschnittliche Länge der Strings Java Basics - Anfänger-Themen 11
M Operatoren Strings mit Vergleichsoperatoren, funktioniert das? Java Basics - Anfänger-Themen 9
S Variablen Letzte Zeile eines Strings entfernen Java Basics - Anfänger-Themen 1
D Strings aus Excel-Datei einlesen Java Basics - Anfänger-Themen 2
P9cman Tipps für Rekursive Aufgaben mit Strings oder allgemein Java Basics - Anfänger-Themen 2
sserio StringBuilder und Strings Java Basics - Anfänger-Themen 8
J Größe eines Strings in Pixel Java Basics - Anfänger-Themen 18
schredder Strings und reguläre Ausdrücke - Methode mit return string.matches Java Basics - Anfänger-Themen 5
B Konkatenieren eines Strings und inkremtierenden Zahl zu einer INT Variablen Java Basics - Anfänger-Themen 7
N Strings verpflechten Java Basics - Anfänger-Themen 4
G Strings auf Gleichheit prüfen - Aufgabe vom Prof. Java Basics - Anfänger-Themen 5
L Strings aneinanderhängen Java Basics - Anfänger-Themen 2
Nerdinfekt BMI Rechner, fehler beim Zurückgeben des Strings? Java Basics - Anfänger-Themen 2
U Problem mit dem initialisieren meines Strings in einer Schleife Java Basics - Anfänger-Themen 5
Q Besitzen zwei Strings identische Buchstaben, nur in anderer Reihenfolge? Java Basics - Anfänger-Themen 10
marcooooo Separator zwischen allen Zeichen eines Strings einfügen Java Basics - Anfänger-Themen 29
C Ternärer Operator mit Strings Java Basics - Anfänger-Themen 3
M Wie kann ich bei int-Variablen im exception handler auf bestimmte Strings reagieren? Java Basics - Anfänger-Themen 5
P Verketten, Aneinanderreihen von Strings Java Basics - Anfänger-Themen 2
M Strings mit gerader und ungerader Länge ausgeben Java Basics - Anfänger-Themen 10
J Alle Werte eines Strings zusammen addieren Java Basics - Anfänger-Themen 15
W Strings und das parsen Java Basics - Anfänger-Themen 8
D Frage zu Strings einer Exception Java Basics - Anfänger-Themen 4
M Konkatenation von zwei Strings Java Basics - Anfänger-Themen 6
J Abbruchbedingung in Schleife/ Untersuchung von Strings Java Basics - Anfänger-Themen 2
S Buchstaben in Großbuchstaben (Strings) Java Basics - Anfänger-Themen 5
X Anagramm mit Strings und Methode Java Basics - Anfänger-Themen 53
P geschachtelte Schleife mit Strings Java Basics - Anfänger-Themen 2
P Strings mit der Axt zerteilen Java Basics - Anfänger-Themen 7
F Alle Zeichenkombinationen eines Strings iterativ herausfinden Java Basics - Anfänger-Themen 26
K Strings hochzählen Java Basics - Anfänger-Themen 20
B Frage zu: String... strings -> Ungleiche Anzahl an Parameter? Java Basics - Anfänger-Themen 4
F Vergleiche mit charAt funktioniert bei Strings nicht, was tun? Java Basics - Anfänger-Themen 5
T Probleme mit Strings Java Basics - Anfänger-Themen 6
J Unveränderbarkeit von Strings Java Basics - Anfänger-Themen 3
O Klammerung bei Strings Java Basics - Anfänger-Themen 10
A Liste aus drei Strings erstellen Java Basics - Anfänger-Themen 5
G Teil(e) eines Strings entfernen wenn spezifische Zeichen (< & >) vorkommen Java Basics - Anfänger-Themen 5
D ergebnis.matches("[1-9]?[0-9].[0-9][0-9]?") ein teil eines größeren Strings Java Basics - Anfänger-Themen 12
J Breite eines Strings bestimmen Java Basics - Anfänger-Themen 4
D Zwei Strings sind gleich bei if aber nicht true Java Basics - Anfänger-Themen 2
J Strings sind gleich werden aber ungleich ausgewertet Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben