2013-09-04 3 views
6

मेरे पास एक फ़ाइल है जिसमें जानकारी है। ऐसा लगता है:किसी फ़ाइल में तारों को विभाजित करने और उन्हें पढ़ने के लिए कैसे?

Michael 19 180 Miami 
    George 25 176 Washington 
    William 43 188 Seattle 

मैं लाइनों और तारों को विभाजित करना और उन्हें पढ़ना चाहता हूं।

BufferedReader in = null; 
    String read; 
    int linenum; 
    try{ 
     in = new BufferedReader(new FileReader("fileeditor.txt")); 
    } 
    catch (FileNotFoundException e) {System.out.println("There was a problem: " + e);} 
    try{ 
     for (linenum = 0; linenum<100; linenum++){ 
      read = in.readLine(); 
      if(read == null){} 
      else{ 
       String[] splited = read.split("\\s+"); 
       System.out.println(splited[linenum]); 
      } 
     } 
    } 
    catch (IOException e) {System.out.println("There was a problem: " + e);} 
} 

क्या यह दिया मुझे

Michael 
    25 
    188 

मैं पाश मेरे लिए के साथ अपने शायद एक मुद्दा लगता था:

Michael 
    19 
    180 
    Miami 
    George 
    ... 

मैं इस तरह एक कोड का इस्तेमाल किया: मैं जैसे कि यह देखने के लिए चाहते हैं लेकिन मैं प्रोग्रामिंग में बहुत उन्नत नहीं हूं और मैं मदद की सराहना करता हूं। धन्यवाद।

उत्तर

5

आप बहुत अच्छे हैं जो आप हैं।

फ़ाइल पढ़ने पर, Readernull लौटाएगा जब यह स्ट्रीम के अंत तक पहुंच जाएगा, जिसका अर्थ है कि कुछ भी पढ़ने के लिए उपलब्ध नहीं है। आपके वर्तमान दृष्टिकोण का अर्थ है कि आप कम से कम 100 लाइनों को पढ़ना चाहते हैं, लेकिन अब और नहीं ... यदि आप आकार बढ़ाना चाहते हैं तो यह भविष्य में समस्याग्रस्त हो जाएगा ... यह कुछ हद तक अपर्याप्त भी है

इसके बजाय, हमें इस तथ्य का उपयोग करना चाहिए null मान फ़ाइल के अंत को इंगित करता है ..

जब आप एक पंक्ति विभाजित करते हैं, तो इसमें कई तत्व होंगे। आप प्रिंट करने के लिए linenum चर का उपयोग कर रहे हैं। समस्या यह है कि, आप पहले से ही लाइन को पढ़ और विभाजित कर चुके हैं, linenum इस कार्य के लिए अप्रासंगिक है, क्योंकि यह आपके द्वारा पहले से पढ़ी गई स्ट्रिंग का हिस्सा नहीं है, जो आप पहले से पढ़ चुके हैं।

इसके बजाय, आप प्रत्येक पंक्ति के लिए अलग-अलग विभाजन तत्व प्रदर्शित करने के एक भीतरी पाश का उपयोग करने की आवश्यकता है ...

उदाहरण के लिए ...

BufferedReader in = null; 
try { 
    in = new BufferedReader(new FileReader("fileeditor.txt")); 
    String read = null; 
    while ((read = in.readLine()) != null) { 
     String[] splited = read.split("\\s+"); 
     for (String part : splited) { 
      System.out.println(part); 
     } 
    } 
} catch (IOException e) { 
    System.out.println("There was a problem: " + e); 
    e.printStackTrace(); 
} finally { 
    try { 
     in.close(); 
    } catch (Exception e) { 
    } 
} 
इसके अलावा

, मत भूलना, अगर आप इसे खोलने, आप बासी पास यह;)

साथ ही आप थोड़ा और समय Basic I/O के माध्यम से जा लेने के लिए चाहते हो सकता है;)

2
String[] splited = read.split("\\s+"); 
    for (int i= 0; i<splited.length; i++){ 
    System.out.println(splited[i]); 
    } 

स्ट्रिंग को विभाजित करने के बाद आपको परिणाम लूप करना चाहिए।

1

आप एकउपयोग कर सकते हैं। यह अपनी सेटिंग्स के अनुसार एक धारा टोकन में विभाजित करेगा। आपके प्रश्न से मुझे लगता है कि आप टोकन विभाजक के रूप में लाइन एंडिंग का इलाज करना चाहते हैं। कोड इस तरह दिखेगा:

import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.IOException; 
import java.io.StreamTokenizer; 

public class ReaderSample { 

    public static void main(String[] args) { 
     BufferedReader in = null; 
     try { 
      in = new BufferedReader(new FileReader("fileeditor.txt")); 
      StreamTokenizer st = new StreamTokenizer(in); 
      st.eolIsSignificant(false); 
      // remove comment handling 
      st.slashSlashComments(false); 
      st.slashStarComments(false); 

      while(st.nextToken() != StreamTokenizer.TT_EOF) { 
       if (st.ttype == StreamTokenizer.TT_NUMBER) { 
        // the default is to treat numbers differently than words 
        // also the numbers are doubles 
        System.out.println((int)st.nval); 
       } 
       else { 
        System.out.println(st.sval); 
       } 
      } 
     } 
     catch(IOException ex) { 
      System.err.println(ex.getMessage()); 
     } 
     finally { 
      if (in != null) { 
       try { 
        in.close(); 
       } 
       catch (IOException ex) { 
       } 
      } 
     } 
    } 
} 

आप इनपुट आप विभिन्न विकल्पों को सेट करने की आवश्यकता हो सकती woth क्या करने की जरूरत पर निर्भर करता है, प्रलेखन तुम यहाँ मदद करनी चाहिए।

+0

'स्कैनर' का उपयोग करके दूसरे विचार पर बेहतर लगता है। 'StreamTokenizer 'पुराना है। –

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

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