Avatar billede |shiva Nybegynder
01. maj 2008 - 22:30 Der er 8 kommentarer

Søge i en arraylist

Hejsa

Jeg har et txt dokument, hvor jeg har nogen oplysninger, som der skal hentes ud. disse står på en linje, og er adskilt af %-tegn. Jeg får lagt disse linjer i en arraylist, og jeg vil nu gerne søge på i hver enkel linje efter en bestemt ting, fx Navn:

Hvordan kan jeg få gjort dette?
Avatar billede arne_v Ekspert
01. maj 2008 - 22:38 #1
Det er ikke specielt klart hvad du har og vil, men jeg gaetter paa noget a la:

List<String> lst = getListFromTextFile();
for(String s : lst) {
    if(s.contains("Navn:")) {
        // goer noget med s
    }
}
Avatar billede |shiva Nybegynder
01. maj 2008 - 22:59 #2
Jeg prøver lige at smide noget kode op til forståelse så :-)

        ArrayList<String> svar = new ArrayList<String>();
        int maend = 0;
       
        try {
            FileReader reader = new FileReader(output);
            Scanner in = new Scanner(reader);
                   

            for (int i = 0; in.hasNextLine(); i++) {
                svar.add(in.nextLine());
                if(in.nextLine().contains("Mand")) {
                    maend++;
                }

            }
        }

Altså den skal tælle hver linje hvori "Mand" er nævnt
Avatar billede erikjacobsen Ekspert
01. maj 2008 - 23:10 #3
Du skal kun kalde nextLine een gang:

        ArrayList<String> svar = new ArrayList<String>();
        int maend = 0;
     
        try {
            FileReader reader = new FileReader(output);
            Scanner in = new Scanner(reader);
                 

            for (int i = 0; in.hasNextLine(); i++) {
                String s = in.nextLine();
                svar.add(s);
                if(s.contains("Mand")) {
                    maend++;
                }

            }
        }

Eller: læse ind i din arraylist, og derefter løbe din arraylist igennem, som Arne skriver.
Avatar billede |shiva Nybegynder
01. maj 2008 - 23:34 #4
Okay, kan man så på en måde søge i linjen og så finde det der står bagefter. fx i txt-filen står der:

%spg1%4%spg2%2

Jeg vil så gerne kunne søge i linjen og finde den værdi der står efter %spg2% og returnere den.
Avatar billede erikjacobsen Ekspert
01. maj 2008 - 23:36 #5
Man kan meget med funktionen split, eller med regulære udtryk, men du skal nok være lidt mere præcis.
Avatar billede |shiva Nybegynder
01. maj 2008 - 23:44 #6
Okay. Kan jeg med en scanner metode søge. Hvis vi ligesom i den du selv skrev, så søger jeg in.nextLine() efter %spg2%. Når den finder dette i linjen, så skal den retunere den værdi der står efter dette. I forbindelse med hvad jeg skrev før, så når den søger i linjen, finder den %spg2% og den skal så retunere værdien 2 til mig, som er det der står efter %spg2%.

Er det forståeligt?
Avatar billede arne_v Ekspert
02. maj 2008 - 02:47 #7
Jeg ville nok bruge en gammeldags BufferedReader fremfor en Scanner.

            BufferedReader reader = new BufferedReader(new FileReader(output));
            String s;
            while((s = reader.readLine()) != null) {
                svar.add(s);
                if(s.contains("Mand")) {
                    maend++;
                }
            }
Avatar billede arne_v Ekspert
02. maj 2008 - 02:59 #8
Lidt inspiration:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Regex {
    public static void main(String[] args) {
        String s = "%spg1%4%spg2%2";
        Pattern p = Pattern.compile("(?:%spg2%)([^%]*)(?:%|$)");
        Matcher m = p.matcher(s);
        if(m.find()) {
            System.out.println("val=" + m.group(1));
        }
    }
}
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