Avatar billede dennish Nybegynder
04. august 2009 - 20:36 Der er 5 kommentarer og
1 løsning

simpelt regulært udtryk i Java

Hej jeg har følgende kode:
Mit map indeholder en masse forskellige unikku koder. F.eks.

"11112","11113","1114" osv.

private Map koder = new HashMap();


String reqex = "1"
ArrayList results = new ArrayList();
Pattern p = Pattern.compile(reqex);

Set keys = koder.keySet();
while (ite.hasNext()) {
        String candidate = (String) ite.next();
        Matcher m = p.matcher(candidate);
        if (m.matches()) {
        System.out.println("it matches");
        results.add(candidate);
        }
    }   
    System.out.println("results match"+results);

Ved at søge på reqeq = "1" finder jeg kun en match, men jeg vil gerne søge igennem alle mine elementer i min map for at finde match. Jeg vil i bund og grund gerne implementer en søgning ligesom LIKE = 'kode%' i SQL. Så hvis reqex ="11" skulle jeg gerne finde alle de elementer der starter med 11
Avatar billede arne_v Ekspert
04. august 2009 - 20:49 #1
Følgende "virker" hos mig:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Like {
    public static void main(String[] args) {
        Map koder = new HashMap();
        koder.put("11112", null);
        koder.put("11113", null);
        koder.put("1114", null);
        koder.put("2345", null);
        String reqex = "1.*";
        List results = new ArrayList();
        Pattern p = Pattern.compile(reqex);
        Set keys = koder.keySet();
        Iterator ite = keys.iterator();
        while (ite.hasNext()) {
            String candidate = (String) ite.next();
            Matcher m = p.matcher(candidate);
            if (m.matches()) {
                results.add(candidate);
            }
        } 
        System.out.println("results match: " + results);
    }
}
Avatar billede dennish Nybegynder
04. august 2009 - 21:10 #2
Arne>> takker. for pokker jeg havde glemt .* for enden af min streng. Nu virker det. Jeg har skåret en autocomplete ned fra 200 ms til gennemsnitlig 80 ms. Tusinde tak for hjælpen. Smider du ikke et svar ?
Avatar billede arne_v Ekspert
04. august 2009 - 21:44 #3
kommer her
Avatar billede dennish Nybegynder
06. oktober 2009 - 02:11 #4
Arne>> har lige et tillægsspørgsmål(du siger bare til hvis jeg skal oprettet et nyt spørgsmål) Ovenstående regulære udtryk fejlser hvis jeg skriver  String reqex = "1).*";
Udtrykker fejlser også ved en *
Kan du lige gennemskue hvad jeg gør forkert )
Avatar billede arne_v Ekspert
06. oktober 2009 - 02:21 #5
Prøv:

String reqex = "1\\).*";

da parenteser har speciel betydning i regex.
Avatar billede dennish Nybegynder
06. oktober 2009 - 23:52 #6
Takker Arne. Jeg man skal lige huske at en ( skal escapes med \\
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