OFDb

Strings in Java vergleichen

Begonnen von Dr. Phibes (Buurman), 17 April 2007, 20:34:27

⏪ vorheriges - nächstes ⏩

0 Mitglieder und 1 Gast betrachten dieses Thema.

Dr. Phibes (Buurman)

Moin,

habe folgendes Problem. Ich wollte zwei Strings lexikalisch vergleichen, d.h. wenn diese Strings später sortiert werden, sollte ein "a" natürlich vor einem "b" sein (wie bei einem Telefonbuch). In diversen Programmiersprachen scheint es wie bei Zahlen einfach über <,> etc. zu gehen. Versuche ich das in Java, erhalte ich eine Fehlermeldung:

public class string {

  public static void main(String args[])  {
    String s1="aaaa";
    String s2="baa";
   
    if(s1 < s2)
     System.out.println("s1 vor s2");
     
     if(s2 < s1)
     System.out.println("s2 vor s1");

  }
}

string.java:10:11: operator < cannot be applied to java.lang.String,java.lang.String

Normal soltle hier s1 < s2 true sein, weil eben lexikalisch "aaaa" vor "baa" kommt.

Mir wäre es erst mal nur wichtig zu wissen, ob es eine einfache Möglichkeit gibt wie z.B. in Delphi. Über Arrays usw. wollte ich eigentlich nicht gehen. Ferner müsste man später Elemente aus einer linearen Liste sortieren können, natürlich alles Strings.

MickeyKnox

Also auf die schnelle kann ich dir mal sagen wie du zumindest die ersten Stellen vergleichen kannst.
Mit chatAt in diesem Falle Stelle 0 kannst du die Zeichen die an der ersten Stelle in dem String stehen mit
<,> vergleichen.

    if(s1.charAt(0)<s2.charAt(0))
    System.out.println("s1 vor s2");
    else
    System.out.println("s2 vor s1");

Hackfresse

Ich vergleiche Strings immer direkt:



LOL  :icon_mrgreen:

SCNR^^
(20:24:16) funeralthirst: was zur hölle ist ein b00n?



"In einer Gesellschaft, in der alle schuldig sind, ist das einzige Verbrechen, sich erwischen zu lassen. In einer Welt voller Diebe ist Dummheit die einzige verbleibende Sünde." Hunter S. Thompson

MickeyKnox

So hab nochmal gerade "gebastelt". Für den Fall das die ersten Zeichen gleich sind hab ich mal folgendes reingebaut (die Wahrscheinlichkeit das auch der Buchstabe an 2. Stelle gleich ist, ist bei Namen glaub ich relativ gering).

public class test {

public void sortString(String s1, String s2){
    if(s1.charAt(0)==s2.charAt(0)){
    if(s1.charAt(1)<s2.charAt(1)){
    System.out.println("s1 vor s2");
    }else{
    System.out.println("s2 vor s1");
    }
    }else{
    if(s1.charAt(0)<s2.charAt(0)){
    System.out.println("s1 vor s2");
    }else{
    System.out.println("s2 vor s1");
    }
    }
}

 

public static void main(String args[])  {
    String s1="aa";
    String s2="ab";    

   
}


}


Ist denke ich recht logisch, erst wird geschaut ob die Strings an der 1.Stelle gleich sind, wenn ja werden sie eben an Stelle 2 verglichen und danach sortiert (ob sie da auch gleich sind hab ich wie gesagt rausgelassen).
Wenn sie nicht gleich sind geht es eben in den else Teil und man vergleicht die 1. Stelle.

Hoffe das hilft dir weiter.

rs007

in Java brauchst du strings manuell gar nicht sortieren, dafür gibt es genügend Methoden

import java.util.*;

public class Sortieren1
{
   public static void main(String[] args)
   {
      List<String> list = new ArrayList<String>(Arrays.asList( new String[]{
         "Noah", "Abraham", "Isaak", "Ismael", "Moses", "Jesus", "Muhammed"  }));

      Collections.addAll( list,
        "Saskia", "Regina",  "Angela", "Astrid", "Manuela", "Silke",
        "Linda",  "Daniela", "Silvia", "Samah",  "Radhia",  "Mejda");

      Collections.sort( list );

      System.out.println( list );
   }
}

man braucht das Rad nicht 1000mal neu erfinden

Dr. Phibes (Buurman)

@Mickey

Danke, werde ich dann mal so versuchen.

@rs007
Natürlich geht das so, es sollen aber spezielle Sortieralgorithmen implementiert werden.

Dr. STRG+C+V n0NAMe

Hi.

Benutz einfach
x.compareTo(y), um die zwei Strings lexikalisch zu vergleichen.

Gruß

n0NAMe
Aktueller Rang: Sergeant of the Master Sergeants Most Important Person of Extreme Sergeants to the Max
---
Carpenter Brut - Le Perv
---
Carpenter Brut - Obituary
---
Pertubator - Miami Disco

Dr. Phibes (Buurman)

Genau das war das,was ich gesucht habe und es funzt. Danke!

TinyPortal 2.0.0 © 2005-2020