2010-03-04 17 views
6

अरे दोस्तों, मैं कुछ सरल पार्सिंग करने के लिए Scanner कक्षा पर जावा की useDelimiter विधि का उपयोग करने का प्रयास कर रहा हूं।नियमित अभिव्यक्ति मिलान करने के लिए "|"

2 | John Doe 
3 | Jane Doe 
4 | Jackie Chan 

विधि एक पैरामीटर के रूप जिसके लिए के लिए मैच के लिए एक नियमित अभिव्यक्ति लेता है: उदाहरण के लिए, तो | "" असल में प्रत्येक पंक्ति एक रिकार्ड से सीमांकित है। क्या कोई मुझे नियमित अभिव्यक्ति प्रदान कर सकता है जो | (दोनों तरफ एक स्थान से अलग एक लंबवत पट्टी) से मेल खाता है।

धन्यवाद, मैं वास्तव में इसकी सराहना करता हूं!

+1

जावा स्ट्रिंग विभाजन समारोह किसी तरह का होना आवश्यक है। आप इसका उपयोग कर सकते हैं। –

+0

हाँ वास्तव में मैं क्या कर रहा हूं, लेकिन मैं अभी भी लाइन स्ट्रिंग को विभाजित करने के लिए रेगेक्स का उपयोग कर रहा हूं :) –

उत्तर

11

मैं \s\|\s के साथ आया जो जावा में "\\s\\|\\s" के रूप में व्यक्त किया जाएगा। मुझे नहीं पता कि यह सबसे अच्छा है या नहीं। मुझे कुछ भी कट्टरपंथी की जरूरत नहीं है, जो कुछ काम करता है, और ऐसा लगता है :)

मेरे अपने प्रश्न का उत्तर देने के लिए खेद है, मुझे लगता है कि इसे लिखने के बाद मुझे यह सोचने में मदद मिली।

+2

बस सावधान रहें, '\ t'' \ t' सहित कोई भी सफेद-स्पेस कैरेक्टर होगा! तो आप अपने इनपुट सेट के आधार पर अधिक विशिष्ट होना चाह सकते हैं। –

+4

मैं सहमत हूं - मैं '" \\ | "के साथ जाऊंगा क्योंकि मेरे तर्क का उपयोग करने के लिए डेलीमीटर –

+0

ओह ठीक है, धन्यवाद! मुझे नहीं पता था कि यह इतना आसान हो सकता है :) –

0
" \| " 

काम करेगा, आपको उद्धरण से बचने की आवश्यकता है और |

0

न भूल दोहरा चरित्र

\S*\s*\|\s*[\S\t ]* 

संपादित मैच के लिए * शामिल करने के लिए - आप बस यह भी .*\|.*

+1

आपका दूसरा रेगेक्स, '। * \ |। *', लौटा तारों पर रिक्त स्थान छोड़ देगा ... –

3

यहाँ उपयोग कर सकते हैं एक कोड स्निपेट है जो एक स्ट्रिंग को पार करता है (या एक पूरी फ़ाइल, स्कैनर दोनों स्वीकार करता है), और प्रत्येक पंक्ति से संख्या और नाम निकालता है:

String s = 
    "1 | Mr John Doe\n" + 
    "2 | Ms Jane Doe\n" + 
    "3 | Jackie Chan\n"; 

Pattern pattern = Pattern.compile("(\\d+) \\| ((\\w|\\s)+)"); 
Scanner scan = new Scanner(s); 
while (scan.findInLine(pattern) != null) { 
    MatchResult match = scan.match(); 

    // Do whatever appropriate with the results 
    System.out.printf("N° %d is %s %n", Integer.valueOf(match.group(1)), match.group(2)); 

    if (scan.hasNextLine()) { 
     scan.nextLine(); 
    } 
} 

यह कोड स्निपेट निम्नलिखित परिणाम पैदा करता है:

N° 1 is Mr John Doe 
N° 2 is Ms Jane Doe 
N° 3 is Jackie Chan 
+0

शांत! विभाजन() में नियमित अभिव्यक्ति का तर्क है, इसलिए आपको \ | का उपयोग करने की आवश्यकता है एक बार का प्रतिनिधित्व करने के लिए, एक स्ट्रिंग में यह "\\ |" है। – jgmao

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