2011-02-06 2 views
5

Я хочу найти, существует ли конкретный шаблон в моем текстовом файле или нет.Как сопоставить шаблон в тексте с помощью классов сканера и шаблона?

им, используя следующие классы для этого:

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

мой образец текста Линия

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

и я хочу, чтобы соответствовать следующий вид шаблона:

A 102 190 

где, на позиции A az или AZ, но единый чартер.

в положении 102 любое целое и любой длины.

в положении 190's любое целое и любой длины.

и мой код для сопоставления с образцом является:

 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)); 
    } 

но картина не соответствует даже есть там ..

я думаю, что проблема с моим рисунком строки:

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

любой, Plz помогите мне, какую строку шаблона я должен использовать ????

ответ

10

Я не уверен, что сканер является лучшим инструментом для этого, поскольку hasNext (Pattern) проверяет, имеет ли следующий токен имеет следующий шаблон. Ваш шаблон проходит через маркеры.

Вы пытались использовать объект Matcher вместо сканера?

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

до сих пор не работает .. я думаю, что проблема с аргументами Pattern.compile –

+0

Они работали хорошо для меня. Может быть, немного подробный, но они должны работать. Попробуйте небольшую скомпилированную тестовую программу, такую ​​как показано выше. –

+0

У вас есть эта линия: - DBREF 1A1F A 102 190 UNP P08046 EGR1_MOUSE 308 396 –

3

Это регулярное выражение линия работает:

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

group(0) вашей matcher (p.matcher) дает A 102 190

.

[EDIT] Хорошо, я дам вам полный рабочий образец затем:

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

все еще не работает. –

+0

Я просто попробовал, он работает. Вы уверены, что вы извлекаете первую «группу» вашего помощника? –

+0

у вас пробовали эту линию: - DBREF 1A1F A 102 190 UNP P08046 EGR1_MOUSE 308 396 –

 Смежные вопросы

  • Нет связанных вопросов^_^