webForumDet fria alternativet

Jämföra strängar

8 svar · 617 visningar · startad av Broms

BromsMedlem sedan sep. 2002188 inlägg
#1

Hur jämför man enklast 2 strängar, alltså inte om de är lika, utan vilken som kommer först i alfabetet MED svenska tecken? så att katt kommer före kött, och att örn kommer före orm..

då ord1 finns att hämtas i lista*.getOrd(), och ord2 finns i temp_ord.

Jag vill lagra alla ord i objekt, i arrayen lista[], och sedan sortera arrayen efter bokstavsordning... så att när man matar in nytt ord så jämförs det med varje ord, så att när man hittat dess plats så flyttar man alla andra ord bakåt i arrayen, eller ska man istället förutom namnet lagra ett index i objektet, alltså objektet Ord(ordet,dess_plats), och ändra bara den siffran, och låta det ligga på ursprunglig plats i arrayen?

Vore tacksam för tips, och gärna gärna något enkelt kodexempel..*

spangoMedlem sedan juni 20008 205 inlägg
#2

Positionen i arrayen ska inte vara en del av objektet. Det här luktar iofs skoluppgift lång väg, så jag vet inte om det är OK att göra så, men det enklaste sättet att hålla en bunt objekt sorterade är med ett SortedSet som t.ex. TreeSet.

BromsMedlem sedan sep. 2002188 inlägg
#3

Faktiskt är det ingen uppgift för skolans räkning utan en sak jag funderat på länge.. Jag läste någonstans förut om en funktion som jämförde 2 ord direkt, och med viss modifiering även fungerade för andra tecken än´det i alfabetet a-z, du vet ingenting om en sådan funktion?

spangoMedlem sedan juni 20008 205 inlägg
#4

Använd Collator för att göra regionsspecifika jämförelser.

BromsMedlem sedan sep. 2002188 inlägg
#5

tack spango, den funktionen jag sökte, men den fungerar väl inte för tecken utanför intervallet a-z/A-Z? Tänkte att det skulle fungera för svenska ord också...

antilizaerMedlem sedan apr. 200357 inlägg
#6

Har inte använt mig av Collator men om man kollar i API:t så borde det väl fungerar om man skickar in ett "svenskt" Locale objekt i getInstance() metoden:

Collator col = Collator.getInstance(new Locale("sv", "se"));
spangoMedlem sedan juni 20008 205 inlägg
#7

Använder man bara Collator.getInstance() returnerar den kollatorn för användarens defaultregion, så svenskar får svensk sortering, tyskar tysk, jänkare amerikansk et.c. Men vill man vara helt hundra på att det verkligen är den svenska som används gör man som antilizaer föreslår.

BromsMedlem sedan sep. 2002188 inlägg
#8

Visst, folk talar om att använda Collator, och någon nämnde bubbleSort.. men om jag har ett ett fält personer[] innehållandes massa objekt, i sin tur innehållandes information namn och ålder, (String namn, int alder).. och jag har en metod i personklassen, för att hämta ut och returnera namnet ur varje objekt... hur sorterar jag då denna array med namn, genom t.ex. en for-sats innehållande if-satser kontrollerandes namnens "storlek"? och om det är större än ett visst namn så läggs det bakom det tidigare, och sedan kontrolleras igen om namnet bakom är mindre, i sådana fall flyttas det bak ännu ett steg..? if(personer.getName() /*vad här?*/ ){ /* gör något.. was?*/ }

Själva jämförelsens utseende tolkar jag som följande:

Collator col = Collator.getInstance(new Locale("sv", "se"));

for(int i=0; i<ANTAL_PERSONER; i++){
 if( co.compare(personer[i-1].getNamn(), personer[i].getNamn()) < 0 )
     System.out.println("1a personen kommer först");
 else
     System.out.println("2a personen kommer först");
}
//men hur använder jag detta till att sortera?! Iställer för utskrifterna ska 
//jag sortera fältet, men how to??

ingen som kan tota ihop ett kort exempel på detta?

spangoMedlem sedan juni 20008 205 inlägg
#9

Det finns en bunt sätt att göra det på, ett sätt är att låta objekten som ska sorteras implementera Comparable.

class Person implements Comparable {

  private static final Collator SV_SE = Collator.getInstance(new Locale("sv", "se"));

  // lägg till fält, metoder etc. efter behov ...
  
  public int compareTo(Object obj){
    Person other = (Person) obj;
    // jämför namnen:
    return SV_SE.compare(this.getName(), other.getName());
  }

}
// ...
Person[] personer = vadSomHelst();
Arrays.sort(personer); // använder compareTo i Person
132 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)