2011-02-06 8 views
5

Chcę sprawdzić, czy określony wzorzec istnieje w moim pliku tekstowym, czy nie.Jak dopasować wzór do tekstu za pomocą skanera i klas wzorów?

im przy następujących klas za to:

java.util.regex.Pattern and java.util.Scanner; 

mój przykładowy tekst Line

String Line="DBREF 1A1F A 102 190 UNP P08046 EGR1_MOUSE  308 396"; 

i chcę, aby dopasować następujący rodzaj wzoru:

A 102 190 

gdzie, na pozycji A na az lub AZ, ale na pojedynczej karcie.

na pozycji 102 dowolnej liczby całkowitej i dowolnej długości.

na pozycji 190 dowolnej liczby całkowitej i dowolnej długości.

i mój kod do dopasowania wzorca jest:

 Scanner sr=new Scanner(Line); 
    Pattern p = Pattern.compile("\\s+([a-zA-Z]){1}\\s+\\d{1,}\\s+\\d{1,}\\s+"); 
    while(sr.hasNext(p)) 
    { 
     System.out.println("Pattern exists"); 
     System.out.println("Matched String : "+sr.next(p)); 
    } 

ale wzór nie jest dopasowanie nawet to istnieją ..

myślę, że problem jest z moim ciąg Wzór:

\\s+([a-zA-Z]){1}\\s+\\d{1,}\\s+\\d{1,}\\s+" 

ktoś, Plz, pomóż mi, jaki ciąg powinienem używać ????

Odpowiedz

10

Nie jestem pewien, czy Scanner jest najlepszym narzędziem do tego, ponieważ sprawdzenie hasNext (Pattern) sprawdza, czy następny token ma następny wzór. Twój wzór przechodzi przez żetony.

Czy próbowałeś używać obiektu Matchera zamiast skanera?

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

public class Foo2 { 
    public static void main(String[] args) { 
     String line = "DBREF 1A1F A 102 190 UNP  P08046 EGR1_MOUSE  308  396"; 
     Pattern p = Pattern.compile("\\s+[a-zA-Z]\\s+\\d{1,}\\s+\\d{1,}\\s+"); 

     Matcher matcher = p.matcher(line); 

     while (matcher.find()) { 
      System.out.printf("group: %s%n", matcher.group()); 
     } 
     System.out.println("done"); 
    } 
} 
+0

nadal nie działa .. myślę, że problem jest z argumentów pattern.compile –

+0

Pracowali w porządku dla mnie. Może trochę gadatliwy, ale powinny działać. Wypróbuj mały skompilowany program testowy, jak pokazano powyżej. –

+0

próbowałeś z tą linią: - DBREF 1A1F A 102 190 UNP P08046 EGR1_MOUSE 308 396 –

3

Linia ta regex działa:

\\s+\\w\\s+\\d+\\s+\\d+ 

group(0) z Twojego matcher (p.matcher) daje A 102 190

.

[EDIT] Ok, dam ci kompletną próbkę roboczą następnie:

Pattern p = Pattern.compile("\\s+\\w\\s+\\d+\\s+\\d+"); 
    Matcher matcher = p.matcher("DBREF 1A1F A 102 190 UNP P08046 EGR1_MOUSE  308 396"); 
    matcher.find(); 
    System.out.println("Found match: " + matcher.group(0)); 
    // Found match: A 102 190 
+0

nadal nie działa. –

+0

Po prostu próbowałem, działa. Czy na pewno wyodrębniasz pierwszą "grupę" swojego matchera? –

+0

próbowałeś z tą linią: - DBREF 1A1F A 102 190 UNP P08046 EGR1_MOUSE 308 396 –

Powiązane problemy