2011-02-06 10 views
5

मैं यह जानना चाहता हूं कि मेरी टेक्स्ट फ़ाइल में कोई विशेष पैटर्न मौजूद है या नहीं।स्कैनर और पैटर्न कक्षाओं का उपयोग कर टेक्स्ट में पैटर्न कैसे मिलान करें?

im इस के लिए निम्नलिखित वर्गों का उपयोग करना:

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

मेरी नमूना पाठ लाइन

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

है और मैं पैटर्न के निम्नलिखित प्रकार से मिलान करना चाहते,:,

A 102 190 

जहां ए की स्थिति एजी या एजेड पर लेकिन एकल चार्टर।

102 की स्थिति में किसी भी पूर्णांक और किसी भी लंबाई की स्थिति में।

1 9 0 की स्थिति में किसी भी पूर्णांक और किसी भी लंबाई की स्थिति में।

और, पैटर्न मिलान के लिए मेरे कोड है:

 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+" 

कोई भी, कृपया मुझे किस पैटर्न स्ट्रिंग का उपयोग करना चाहिए ????

उत्तर

10

मुझे यकीन नहीं है कि स्कैनर यह है कि अगला पूर्ण टोकन में अगला पैटर्न है या नहीं, यह देखने के लिए हैकनेक्स्ट (पैटर्न) चेक के रूप में स्कैनर सबसे अच्छा टूल है। आपका पैटर्न टोकन भर में चला जाता है।

क्या आपने स्कैनर के बजाय मैचर ऑब्जेक्ट का उपयोग करने का प्रयास किया है?

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

क्या आपने इस लाइन के साथ प्रयास किया है: - डीबीआरईएफ 1 ए 1 एफ ए 102 1 9 0 यूएनपी पी 08046 ईजीआर 1_MOUSE 308 396 –

3

इस regex लाइन काम करता है:

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

की group(0) अपने matcher (p.matcher) A 102 190

देता है।

[संपादित करें] ठीक है, मैं तुम्हें एक पूरा काम कर नमूना तो दे देंगे:

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

मैंने अभी कोशिश की, यह काम करता है। क्या आप वाकई अपने matcher के पहले 'समूह' निकालने जा रहे हैं? –

+0

क्या आपने इस लाइन के साथ प्रयास किया है: - डीबीआरईएफ 1 ए 1 एफ ए 102 1 9 0 यूएनपी पी 08046 ईजीआर 1_MOUSE 308 396 –