2011-08-26 10 views
23

मैं जब तक मैं एक स्कैनर के माध्यम से एक फ़ाइल पढ़ रहा हूँ मेरे कार्यक्रम में एक रन टाइम अपवाद मिला है।java.util.NoSuchElementException: नहीं लाइन पाया

java.util.NoSuchElementException: No line found  
    at java.util.Scanner.nextLine(Unknown Source)  
    at Day1.ReadFile.read(ReadFile.java:49) 
    at Day1.ParseTree.main(ParseTree.java:17) 

मेरे कोड है:

while((str=sc.nextLine())!=null){ 
    i=0; 
    if(str.equals("Locations")) 
    { 
     size=4; 
     t=3; 
     str=sc.nextLine(); 
     str=sc.nextLine(); 
    } 
    if(str.equals("Professions")) 
    { 
     size=3; 
     t=2; 
     str=sc.nextLine(); 
     str=sc.nextLine(); 
    } 
    if(str.equals("Individuals")) 
    { 
     size=4; 
     t=4; 
     str=sc.nextLine(); 
     str=sc.nextLine(); 
    } 

int j=0; 
String loc[]=new String[size]; 
while(j<size){ 
    beg=0; 
    end=str.indexOf(','); 
    if(end!=-1){ 
     tmp=str.substring(beg, end); 
     beg=end+2; 
    } 
    if(end==-1) 
    { 
     tmp=str.substring(beg); 
    } 
    if(beg<str.length()) 
     str=str.substring(beg); 
    loc[i]=tmp; 
    i++; 

    if(i==size){ 
     if(t==3) 
     { 
      location.add(loc); 
     } 
     if(t==2) 
     { 
      profession.add(loc); 
     } 
     if(t==4) 
     { 
      individual.add(loc); 
     } 
     i=0; 
    } 
    j++; 
    System.out.print("\n"); 
} 
+1

कोशिश अपने कोड में सभी स्थानों को हटा ... यह थोड़े मेरी आँखों खिंचाव। इसके अलावा, "यहां अपना कोड दर्ज करें", यह मेरे लिए होमवर्क जैसा दिखता है –

+2

SO में आपका स्वागत है। कोड पोस्ट करते समय आपको इसे पठनीयता के लिए प्रारूपित करने के लिए सावधानी बरतनी चाहिए ... यानी अनावश्यक रिक्त रेखाएं हटाएं, ठीक से इंडेंट करें। इसे पढ़ने योग्य बनाने के लिए कोड के रूप में अपने स्टैकट्रैक को भी प्रारूपित करें। मैंने आपके लिए स्वरूपण तय किया है। –

+2

इसके अलावा, आपने सबसे महत्वपूर्ण टुकड़ा छोड़ा, इस प्रकार 'एससी' घोषित और खोला गया था। –

उत्तर

20

Scanner साथ आप अगर वहाँ hasNextLine()

के साथ एक अगली पंक्ति तो पाश

while(sc.hasNextLine()){ 
    str=sc.nextLine(); 
    //... 
} 

यह पाठकों कि EOF पर अशक्त वापसी है हो जाता है जांच करने की आवश्यकता

टी में बिल्कुल कोड के बारे में उनकी टुकड़ा इस लिए कि क्या इनपुट ठीक से

12

आप nextLine() कॉल कर रहे हैं और यह एक अपवाद फेंक रहा है जब वहाँ कोई लाइन है, जावाडोक का वर्णन करता है बिल्कुल के रूप में। यह कभी वापस नहीं होगा null

http://download.oracle.com/javase/1,5.0/docs/api/java/util/Scanner.html

2

स्वरूपित है जो भी कारण, स्कैनर वर्ग भी इसी अपवाद जारी करता है अगर यह विशेष वर्ण यह नहीं पढ़ सकते हैं का सामना करना पड़ता के लिए पर निर्भर है।

Scanner scanner = new Scanner(new FileInputStream(filePath), "UTF-8");

1

आपका असली समस्या यह है कि आप बुला रहे हैं "sc.nextLine()" अधिक है: nextLine() की प्रत्येक कॉल से पहले hasNextLine() विधि का उपयोग कर के अलावा, सुनिश्चित करें कि सही एन्कोडिंग Scanner निर्माता को पारित कर दिया है, जैसे बनाना बार लाइनों की संख्या से।

आप जानना चाहते हैं, यदि आप केवल 10 इनपुट लाइनें है तो आप "sc.nextLine()" 10 बार केवल कॉल कर सकते हैं है।

हर बार जब आप कहते हैं "sc.nextLine()", एक इनपुट लाइन भस्म हो जाएगा। यदि आप लाइनों की संख्या से अधिक "sc.nextLine()" को कॉल करते हैं, तो आपके पास "java.util.N.NoSuchElementException: कोई पंक्ति नहीं मिली" नामक अपवाद होगा।

आप "sc.nextLine()" "एन कॉल करने के लिए है, तो एन" लाइनों "बार है, तो आप कम से कम करने के लिए नहीं है।"

कोशिश लाइनों की संख्या के साथ "() sc.nextLine" कई बार संख्या से मिलान करने के आप कॉल अपने कोड को बदलने के लिए, और मैं कि आपकी समस्या को हल किया जा जाएगा गारंटी

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