2013-04-17 6 views
7

क्यों पहला ब्लॉक काम करता है लेकिन दूसरा ब्लॉक नहीं करता है?जावा स्कैनर बनाम मैचर - नियमित अभिव्यक्तियां, मैचर काम करता है, स्कैनर

int numberOfDigits = 2; 
Pattern p = Pattern.compile("[01]{"+numberOfDigits+"}"); 
Matcher m = p.matcher("101100101011010011111000"); 
while(m.find()){ 
    System.out.println(m.group()); 
} 

ब्लॉक 2

Scanner scannerSegment = new Scanner("101100101011010011111000"); 
    while(scannerSegment.hasNext(p)){ 
    String segment = scannerSegment.next(p); 
     System.out.println(segment); 

    } 

उत्तर

3

Scanner अपने hasNext(Pattern pattern) विधि का उपयोग पैटर्न को पुनः प्राप्त करने के लिए उचित उपयोगिता नहीं है। यह जांच करेगा कि अगला पूर्ण टोकन अनुरोधित पैटर्न है या नहीं।

Java API सबसे अच्छा दस्तावेज़ है।

कुछ अंश:

hasNext() : Returns true if the next complete token matches the specified 
pattern. A complete token is prefixed and postfixed by input that matches 
the delimiter pattern.` 

तो अगर आप इनपुट अंतरिक्ष या किसी अन्य सीमांकक द्वारा अलग किया जाएगा करने के लिए बदल (अन्य डेलीमीटर Scanner वस्तु को परिभाषित करने के बाद स्थापित किया जाना है), यह काम करेंगे। तो यह (वर्तमान पैटर्न के लिए) काम करना चाहिए:

Scanner scannerSegment = new Scanner("10 11 00 10 10 11 01 00 11 11 10 00"); 

यहां तक ​​कि इस (वर्तमान पैटर्न के लिए) काम करेगा:

Scanner scannerSegment = new Scanner("10,11,00,10,10,11,01,00,11,11,10,00"); 
scannerSegment.useDelimiter(","); 

संपादित करें: Scanner अपने इनपुट परिसीमक पद्धति का उपयोग कर टोकन में टूट जो डिफ़ॉल्ट मैट्स स्पेस से मेल खाता है।

+0

धन्यवाद, क्या आपके पास समर्थन करने के लिए कोई दस्तावेज है? – Achow

+0

क्या आप सुनिश्चित हैं कि निर्माणकर्ता 'स्कैनर' ऑब्जेक्ट के निर्माता में 'स्कैनर (स्ट्रिंग स्रोत)' के साथ, यह स्कैनर स्रोत स्ट्रिंग के साथ एक पूर्ण टोकन के साथ काम करता है? मुझे अपने अनुमान की पुष्टि करने के लिए कुछ भी नहीं मिला। – bsiamionau

+0

क्या आप पूर्ण कामकाजी डेमो पोस्ट कर सकते हैं? यह अभी भी मेरे लिए काम नहीं करता है। – bsiamionau

संबंधित मुद्दे