Avatar billede jespersahner Nybegynder
21. marts 2005 - 12:00 Der er 16 kommentarer og
1 løsning

Checke om array (af Strings) indeholder bestemt element

Hvordan checker jeg hurtigst muligt, om et array af Strings indeholder en bestemt String, fx.

String[] ss={"a", "hej", "b", "hej igen", "c", "d"};
String s="c";

Vil her checke, om s er et element i ss. Kan selvfølgelig lave en løkke, men er der ikke en metode, der gør det direkte?
Avatar billede arne_v Ekspert
21. marts 2005 - 12:03 #1
Ikke mig bekendt.

Hvis arrayet er sorteret kan du bruge Arrays binarySearch.

ArrayList har en contains metode.
Avatar billede jespersahner Nybegynder
21. marts 2005 - 12:07 #2
->arne_v: Nej, arrays har vel ikke metoder, selv om de jo er objekter. Alternativt skal jeg bruge ArrayList, som du foreslår, og så kan jeg måske lige så godt bare lave en løkke.
Avatar billede thomaskleist Nybegynder
21. marts 2005 - 12:26 #3
jeg sidder og tænker på en  sådanne noget her
for(int i =0,i<=ss.size,i++)
  if(ss.{
String[] ss = {"a","b","c"};
String s = "c";
  public Class1()
  {
    for (int i=0 ;i<=ss.length ;i++ )
    {
      if (ss[i].equalsIgnoreCase(s))
   
          System.out.println(s+"findes i arrayet");
   
      else
     
        System.out.println(s+"findes ikke i arrayet");
      }
    }
Avatar billede thomaskleist Nybegynder
21. marts 2005 - 12:29 #4
ups det var en lille fatal fejl i den første kode jeg sendte den her virker

{
String[] ss = {"a","b","c"};
String s = "c";
  public Class1()
  {
    for (int i=0 ;i<=ss.length ;i++ )
    {
      if (ss[i].equalsIgnoreCase(s))
   
          System.out.println(s+"findes i arrayet");
   
      else
     
        System.out.println(s+"findes ikke i arrayet");
      }
    }
Avatar billede arne_v Ekspert
21. marts 2005 - 12:31 #5
øh

i<=ss.length

skal nok være

i<ss.length
Avatar billede arne_v Ekspert
21. marts 2005 - 12:32 #6
System.out.println(s+"findes i arrayet");

skal vel efterfølges af en return

System.out.println(s+"findes ikke i arrayet");

skal vel ned efter løkken
Avatar billede jespersahner Nybegynder
21. marts 2005 - 12:54 #7
->thomaskleist: Enig, det var hvad jeg mente med en løkke.
Avatar billede thomaskleist Nybegynder
21. marts 2005 - 15:37 #8
til arne jo det har du ret i det var fordi jeg lavede  metoden inde i kontruktøren
og der kan man jo ikke lave return!
Og til jespersahner der er ikke andere måder at løse problemet end med end for løkke.
og det gælder både for array og arraylist
Avatar billede arne_v Ekspert
21. marts 2005 - 16:58 #9
Med ArrayList kan man bruge contains metoden - men den laver selvfølgelig også
en løkke men det er så SUN's kode ikke ens egen.
Avatar billede dbangx Nybegynder
23. marts 2005 - 11:36 #10
Jeg ville nok gøre noget i den her stil:

String[] ss={"a", "hej", "b", "hej igen", "c", "d"};
String s="c";

for (int i = 0;i<ss.length ; i++)
  if (ss[i].compareTo(s)==0) break;

if(i <ss.length)System.out.println("strenge er på plads "+ i);
else System.out.println("strenge findes ikke");
Avatar billede thomaskleist Nybegynder
23. marts 2005 - 11:59 #11
Jeg vil sige at CompareTo er en dårlig idé at bruge i det her tilfælde for man bruger mest metoden til at sortere array´s at string i alfabetisk orden og ikke til søgning i et array
Avatar billede arne_v Ekspert
23. marts 2005 - 12:42 #12
Jeg ville heller aldrig bruge compareTo til det - equals passer bare bedre
til konteksten.

Men det virker naturligvis - og der skal søges rigtigt meget inden performance
forskellen kan måles.

Men lad mig gætte - dbangx du koder også i C !?  :-)
Avatar billede jespersahner Nybegynder
23. marts 2005 - 14:15 #13
..et svar :-)
Avatar billede dbangx Nybegynder
23. marts 2005 - 15:42 #14
nej faktisk ikke. Jeg mente bare at .equals() var en sammenligning på referencen og ikke indholdet af String objektet, men jeg kan ikke lige huske det.
Avatar billede arne_v Ekspert
23. marts 2005 - 15:59 #15
== sammenligner referencen
equals sammenligner indholdet

ok - jeg troede bare at det var en strcmp oversættelse
Avatar billede arne_v Ekspert
23. marts 2005 - 16:00 #16
og et svar
Avatar billede dbangx Nybegynder
23. marts 2005 - 16:00 #17
hmmm. Sorry, jeg tog fejl, har lige læst javadoc. Det viser sig at equals er overridet på String, så den eller equalsIgnoreCase() er et bedre valg.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester