2012-12-11 16 views
7

मैं एक पाठ फ़ाइल है कि इस तरह वास्तव में लग रहा है से जानकारी की एक लंबी लाइन पढ़ रहा हूँ करने के लिए विभाजन पढ़ें:एक पंक्ति का पाठ फ़ाइल, सरणी

Sebastien 5000\\Loic 5000\\Shubhashisshh 5000\\Thibaullt 5000\\Caroo 5000\\Blabla 5000\\Okayyy 5000\\SebCed 5000\\abusee 5000\\omg 5000\\

यह अपेक्षा की जाती है नाम के साथ उच्च स्कोर होने के लिए उपयोगकर्ताओं का जब मैं लाइन प्रिंट आउट, ऐसा लगता है यह होना चाहिए कि वास्तव में लग रहा है, लेकिन जब मैं split("\\\\") उपयोग करने के बाद सरणी प्रिंट आउट, यह इस तरह दिखता है:

[Sebastien 5000, , Loic 5000, , Shubhashisshh 5000, , Thibaullt 5000, , Caroo 5000, , Blabla 5000, , Okayyy 5000, , SebCed 5000, , abusee 5000, , omg 5000]

समस्या यह है कि Array[0] ठीक है पर Array[1] खाली है , Array[3], Array[5], आदि

यहां मेरा कोड है। इसके साथ गलत क्या है?

  BufferedReader in = null; 
    try { 
     in = new BufferedReader(new FileReader(path)); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 

    String line = null; 
    try { 
     line = in.readLine(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    System.out.println("LINE = "+line); 

    String[] scores = line.split("\\\\"); 

    System.out.println("Mode = "+mode+Arrays.toString(scores)); 
+0

आप line.split ("\\\\") का उपयोग कर रहे ';' या है कि एक लेखन त्रुटि है? मुझे लगता है कि आपको 'लाइन चाहिए।विभाजन ("\\\"); ' – NickD

+1

@ निकड यह एक रेगेक्स लेता है, इसलिए आपको' "\\\\" की आवश्यकता है जो पहले शाब्दिक स्ट्रिंग '' \\ '' और फिर एक शाब्दिक '' \ ''। '" \\\ "' संकलित नहीं है क्योंकि यह अनियमित स्ट्रिंग अक्षर है। – Esailija

+0

यह एक टाइपो नहीं है, क्योंकि आपको एक विशेष char और दूसरी बार एक बार बचाना है क्योंकि अगर मैं विभाजन करना चाहता हूं तो यह एक स्ट्रिंग है \\\\ मैं नहीं? – user1895293

उत्तर

9

क्योंकि "\\\\"\\ के रूप में पार्स किया जा रहा है और split method एक रेगुलर एक्सप्रेशन का उपयोग करता है, तो \\\ हो रहा है यही कारण है, तो Sebastien 5000\\Loic 5000[Sebastien 5000,,Loic 5000]

में परिणाम होगा बजाय यह करें: "\\\\\\\\"

+0

मेरे विचार बिल्कुल .... –

+0

बहुत बहुत धन्यवाद:) मुझे कभी यह नहीं मिला होगा: पी – user1895293

0

मैं करूंगा निक से एक आगे चला गया है:

line.split("\\\");

यह विचार मानता है कि आप प्रत्येक बिंदु पर लाइन को विभाजित करने की कोशिश कर रहे हैं जहां डबल बैक-स्लैश दिखाई देता है - ऐसा लगता है जैसे आपका कोड प्रत्येक वैकल्पिक डबल-स्लैश पर विभाजित होता है, जो प्रत्येक नाम के बीच डबल कॉमा को समझाएगा ; इसलिए, प्रत्येक विभाजन भाग के बीच (यानी अल्पविरामों के बीच के प्रत्येक वर्ग में, एक के बजाय दो प्रविष्टियां होती हैं, ताकि एक प्रविष्टि केवल एक अल्पविराम है)। देखें कि यह काम करता है - शुभकामनाएं !!

एम

+0

जावा में "\\" वास्तव में एकल स्लैश है, और regexp के लिए यह एक बच निकलने वाला चरित्र है, इसलिए "\\\\ "regexp में एकल स्लैश का मतलब है – hoaz

3

बस मस्ती के लिए, एक तरफ जोस रॉबर्टो समाधान, आप भी कुछ वैकल्पिक भाव (और बहुत अन्य) का उपयोग कर सकते हैं:

दो लगातार बैकस्लैश (समान है कि जोस के दशक में, लेकिन एक परिमाणक का प्रयोग करके) :

String[] scores = line.split("\\\\{2}"); 

दो लगातार गैर-वर्ड वर्ण:

String[] scores = line.split("\\W{2}"); 

दो विराम वर्ण:

String[] scores = line.split("\\p{Punct}{2}"); 

वे सब के सब आवश्यक उत्पादन का उत्पादन।

जावा में रेगुलर एक्सप्रेशन के बारे में अधिक जानकारी के लिए:

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