2009-08-26 15 views
7

का उपयोग कर रहा लाइन द्वारा एक पाठ फ़ाइल लाइन को पढ़ने के लिए स्कैनर का उपयोग कर रहा है, लेकिन फिर कैसे प्रत्येक इनपुट के माध्यम से स्कैनर दोहराता के बाद से लाइन नंबर पाने के लिए लाइन नंबर पाने के लिए मेरे कार्यक्रम कुछ इस तरह है:कैसे स्कैनर

s = new Scanner(new BufferedReader(new FileReader("input.txt"))); 

while (s.hasNext()) { 
System.out.print(s.next()); 

यह ठीक काम करता है, लेकिन उदाहरण के लिए:

 
1,2,3 
3,4,5 

मैं जो मतलब 1,2,3 लाइन 1 में है और 3,4,5 कतार में है 2.How मुझे लगता है कि मिलता है इसके बारे में लाइन नंबर जानना चाहता हूँ ?

उत्तर

16

स्कैनर इसकी बात करते समय लाइन नंबर का ट्रैक रखने के लिए BufferedReader के स्थान पर LineNumberReader का उपयोग कर सकता है।

LineNumberReader r = new LineNumberReader(new FileReader("input.txt")); 
String l; 

while ((l = r.readLine()) != null) { 
    Scanner s = new Scanner(l); 

    while (s.hasNext()) { 
     System.out.println("Line " + r.getLineNumber() + ": " + s.next()); 
    } 
} 

नोट: "स्पष्ट" समाधान मैं पहली पोस्ट के रूप में स्कैनर वर्तमान टोकन से आगे पढ़ता काम नहीं करता।

r = new LineNumberReader(new FileReader("input.txt")); 
s = new Scanner(r); 

while (s.hasNext()) { 
    System.out.println("Line " + r.getLineNumber() + ": " + s.next()); 
} 

+0

यह एक दया वहाँ अभी भी, प्रति पंक्ति एक स्कैनर बनाने हालांकि बेहतर कोई समाधान है। मैंने आपके पहले "बेवकूफ" समाधान के समान समस्या पर ठोकर खाई, स्कैनर बहुत आगे पढ़ता है और छोटे बफर को सेट करने का कोई तरीका नहीं लगता है। – Joffrey

9

बस पाश में एक काउंटर डाल:

s = new Scanner(new BufferedReader(new FileReader("input.txt"))); 

for (int lineNum=1; s.hasNext(); lineNum++) { 
    System.out.print("Line number " + lineNum + ": " + s.next()); 
} 
+2

मुझे लगता है कि यह केवल तभी काम करता है यदि आपके पास .useDelimiter() नई लाइन पर सेट है। यदि आप व्हाइटस्पेस (जैसे शब्दों) के लिए स्कैन करते हैं तो इससे बदले में शब्दों की गणना होगी। – Roalt

+1

मैंने हैक्स्टलाइन/अगलीलाइन का उपयोग करने के लिए उदाहरण अपडेट किया ताकि यह ओपी के प्रश्न को हल कर सके। –

+0

वास्तव में सरल, और काम करता है! – tiboo

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