दिलचस्प पोस्ट
Codeigniter में अपलोड – आप अपलोड करने का प्रयास कर रहे फ़ाइल प्रकार की अनुमति नहीं है HTML <चयन करें> चयनित विकल्प पृष्ठभूमि रंग सीएसएस शैली 2 कोणों के बीच का सबसे छोटा अंतर कंसोल से कैसे मैं AngularJS सेवा का परीक्षण कर सकता हूं? एक प्रयोक्ता मैनुअल का निर्माण करने के लिए आवेदन (नहीं एक मार्कअप भाषा) प्रोग्रामिंग के लिए अनुशंसित फ़ॉन्ट्स? उधार की गई सामग्री से बाहर नहीं जा सकते क्या सी / सी ++ में% (मॉड्यूलस) का उपयोग करने के लिए कोई विकल्प है? `I = ++ i + 1` अनिर्दिष्ट व्यवहार क्यों है? mod_rewrite: पिछला स्लेश निकालें (केवल एक!) क्या py2exe के कोई विकल्प हैं? ExternalContext.redirect () का उपयोग करके रीडायरेक्ट पृष्ठ पर चेस संदेश जोड़ना कैसे दो java.lang.Numbers जोड़ने के लिए? हैस्केल ऑपरेटरों के लिए कौन-से पात्रों की अनुमति है? जब NH45 / NHibernate / Hibernate OneToMany रिश्तों पर उलटा = झूठ का उपयोग करें?

स्कैनर क्लास से अगले () और अगली लाइन () विधियों के बीच अंतर क्या है?

next() और next() nextLine() बीच मुख्य अंतर क्या है?
मेरा मुख्य लक्ष्य Scanner का उपयोग करके सभी पाठ को पढ़ना है जो कि किसी भी स्रोत (उदाहरण के लिए फ़ाइल) से "कनेक्ट" हो सकता है

मुझे कौन चुनना चाहिए और क्यों?

Solutions Collecting From Web of "स्कैनर क्लास से अगले () और अगली लाइन () विधियों के बीच अंतर क्या है?"

मैं हमेशा nextLine() का उपयोग करके इनपुट पढ़ना पसंद करता हूं और फिर स्ट्रिंग को पार्स करता हूं।

next() का उपयोग केवल एक स्थान से पहले ही आएगा जो वापस आता है। nextLine() स्वचालित रूप से मौजूदा लाइन को लौटने के बाद स्कैनर को नीचे ले जाता है।

str.split("\\s+") nextLine() से डेटा पार्स करने के लिए एक उपयोगी उपकरण str.split("\\s+")

 String data = scanner.nextLine(); String[] pieces = data.split("\\s+"); // Parse the pieces 

स्कैनर क्लास या स्ट्रिंग क्लास के बारे में अधिक जानकारी के लिए निम्नलिखित लिंक देखें

स्कैनर: http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html

स्ट्रिंग: http://docs.oracle.com/javase/7/docs/api/java/lang/String.html

next() अंतरिक्ष तक केवल इनपुट पढ़ सकते हैं। यह अंतरिक्ष द्वारा अलग किए गए दो शब्दों को नहीं पढ़ सकता है। साथ ही, next() इनपुट पढ़ने के बाद कर्सर को एक ही पंक्ति में रखता है

nextLine() शब्दों के बीच अंतरिक्ष सहित इनपुट पढ़ता है (यानी, यह लाइन के अंत तक पढ़ता है \n )। एक बार इनपुट पढ़े जाने पर, अगली पंक्ति में कर्सर की स्थिति अगले लाइन nextLine()

पूरी लाइन को पढ़ने के लिए आप nextLine() लाइन का उपयोग कर सकते हैं nextLine()

जावा डॉक से:

  • एक Scanner एक डिलीमीटर पैटर्न का उपयोग करके इसके इनपुट को टोकन में तोड़ता है, जो डिफ़ॉल्ट रूप से व्हाटस्पेस से मेल खाता है।
  • next() : इस स्कैनर से अगले पूर्ण टोकन का पता लगाता है और रिटर्न करता है।
  • nextLine() : इस स्कैनर की वर्तमान रेखा से पहले की ओर बढ़ती है और इनपुट को छोड़ दिया गया था जो कि छोड़ दिया गया था।

तो "small example<eol>text" मामले में "small example<eol>text" next() nextLine() को वापस करना चाहिए nextLine() "छोटे उदाहरण"

मैं अगले () के बाद से देखता हूं (स्कैन) जहां तक ​​अगले स्थान तक स्कैन किया जाता है, जहां अगले लाइन () पूरी रेखा को स्कैन करती है, अगले इंतजार की जाती है, जब तक कि यह एक पूर्ण टोकन न हो जाए, जहां तक अगले (पूर्ण) टोकन का इंतजार नहीं करता, जब कभी '\ n' प्राप्त किया जाता है (यानी जब आप एंटर कुंजी दबाते हैं) स्कैनर कर्सर अगली पंक्ति में जाता है और पिछली लाइन को छोड़ दिया जाता है। यह जांच नहीं करता कि आपने पूर्ण इनपुट दिया है या नहीं, यहां तक ​​कि यह एक खाली स्ट्रिंग लेगा जहां अगले () खाली स्ट्रिंग नहीं लेता है

  public class Stringtest { /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here Scanner sc = new Scanner(System.in); int cases = sc.nextInt(); String []str = new String[cases]; for(int i=0;i<cases;i++) { str[i]=sc.next(); } } } 

लूप के लिए अगले () और अगले लाइन () को बदलने के द्वारा इस प्रोग्राम को आज़माएं, '\ n' दबाए जाने पर जाइए जो बिना किसी इनपुट के कुंजी दर्ज कर लेता है , आपको लगता है कि अगले लाइन का उपयोग करते हुए () पद्धति यह निर्धारित संख्याओं को दबाने के बाद समाप्त हो जाती है जैसा कि अगले () नहीं करता है जब तक आप दिए गए नंबरों की संख्या के लिए इसे प्रदान और इनपुट नहीं कर सकते।

जवाडॉक्स से

अगला () अगले टोकन देता है यदि वह निर्दिष्ट स्ट्रिंग से निर्मित पैटर्न से मेल खाता है। nextLine () मौजूदा स्कैनर के पास इस स्कैनर को अग्रिम करता है और उस इनपुट को वापस देता है जो छोड़ा गया था।

जो आप चुनते हैं वह निर्भर करता है जो आपकी आवश्यकताओं को सबसे अच्छा मानता है। अगर मैं एक पूरी फाइल पढ़ रहा था तो मैं अगली बार के लिए जाना चाहूँगा जब तक कि मेरे पास सभी फाइल नहीं थी।

संक्षेप में: यदि आप लंबाई की एक स्ट्रिंग सरणी इनपुट कर रहे हैं, तो स्कैनर # अगली पंक्ति () टी लाइनों की अपेक्षा करते हैं, स्ट्रिंग सरणी में प्रत्येक प्रविष्टि दूसरे से प्रवेश कुंजी द्वारा विभेदित होती है। और स्कैनर # अगला () तक इनपुट लेते रहेंगे आप एंटर दबाते हैं लेकिन सरणी के अंदर स्ट्रिंग (शब्द) को स्टोर करते हैं, जो कि व्हाइटस्पेस से अलग है।

कोड के निम्नलिखित स्निपेट पर नजर डालें

  Scanner in = new Scanner(System.in); int t = in.nextInt(); String[] s = new String[t]; for (int i = 0; i < t; i++) { s[i] = in.next(); } 

जब मैं अपने आईडीई में कोड के स्निपेट से ऊपर चलाता हूँ (स्ट्रिंग लम्बाई 2 के लिए कह देता है), इससे कोई फर्क नहीं पड़ता कि मैं अपना स्ट्रिंग कैसे दर्ज करता हूँ

इनपुट के रूप में: – abcd abcd या

के रूप में इनपुट: –

ऐ बी सी डी

ऐ बी सी डी

आउटपुट एबीसीडी जैसा होगा

ऐ बी सी डी

लेकिन अगर एक ही कोड में हम next () विधि को अगले लाइन () की जगह लेते हैं ()

  Scanner in = new Scanner(System.in); int t = in.nextInt(); String[] s = new String[t]; for (int i = 0; i < t; i++) { s[i] = in.nextLine(); } 

उसके बाद यदि आप शीघ्र पर इनपुट दर्ज करते हैं- abcd abcd

आउटपुट है: –

एबीसीडी एबीसीडी

और यदि आप एपीसीडी के रूप में संकेत पर इनपुट दर्ज करते हैं (और अगर आप किसी दूसरे पंक्ति में अगले एबीसीडी दर्ज करने के लिए एन्टर दबाते हैं, इनपुट प्रॉम्प्ट केवल बाहर निकलता है और आप आउटपुट प्राप्त करेंगे)

आउटपुट है: –

ऐ बी सी डी

इस प्रश्न के लिए, मुख्य बिंदु यह है कि विधि कहां बंद हो जाएगी और तरीके कहने के बाद कर्सर कहाँ है। कर्सर की स्थिति और अगले डिफ़ॉल्ट सीमांकक (व्हाइटपस, टैब, \ n – एंटर दबाकर बनाया गया) के बीच सभी विधियां जानकारी (व्हाइटस्पेस को शामिल नहीं करती हैं) और कर्सर को सीमांकक से पहले रोकता है, अगले लाइन () के अलावा, जो कर्सर स्थिति और \ n के बीच की जानकारी (सीमांकक द्वारा बनाई गई व्हाटस्पेस सहित) पढ़ती है और कर्सर पीछे \ n बंद हो जाता है

उदाहरण के लिए: (| वर्तमान कर्सर स्थिति का प्रतिनिधित्व करना; _ व्हाइटस्पेस का प्रतिनिधित्व करना; कॉलिंग विधि द्वारा प्राप्त जानकारी में बोल्ड)

23_24_25_26_27 \ N

अगली प्रविष्ट करें (); 23 | _24_25_26_27 \ n पढ़ें

अगले कॉल करें डबल (); 23_ 24 | _25_26_27 \ n पढ़ें

अगली () कॉल करें; 23_24_ 25 | _26_27 \ n पढ़ें

अगली पंक्ति को कॉल करें (); 23_24_25 _26_27 \ n पढ़ें |

इसके बाद, आपकी आवश्यकता के आधार पर विधि को बुलाया जाना चाहिए।

स्कैनर के लिए प्रलेखन से:

एक स्कैनर एक डिलीमीटर पैटर्न का उपयोग करके इसके इनपुट को टोकन में तोड़ता है, जो डिफ़ॉल्ट रूप से व्हाटस्पेस से मेल खाता है।

अगले () के लिए दस्तावेज़ से:

एक पूर्ण टोकन पूर्ववर्ती है और उसके बाद इनपुट है जो सीमांकक पैटर्न से मेल खाता है।

अगले () और अगली लाइन () तरीके स्कैनर के साथ जुड़े हुए हैं और स्ट्रिंग इनपुट प्राप्त करने के लिए उपयोग किया जाता है। उनके मतभेद हैं …

अगले () अंतरिक्ष तक केवल इनपुट पढ़ सकते हैं। यह अंतरिक्ष द्वारा अलग किए गए दो शब्दों को नहीं पढ़ सकता है। साथ ही, अगला () इनपुट पढ़ने के बाद कर्सर को एक ही पंक्ति में रखता है

nextLine () शब्दों के बीच अंतरिक्ष सहित इनपुट पढ़ता है (यानी, यह लाइन के अंत तक पढ़ता है \ n)। एक बार इनपुट पढ़े जाने पर, अगली पंक्ति में कर्सर की स्थिति अगले लाइन () हो जाती है

 import java.util.Scanner; public class temp { public static void main(String arg[]) { Scanner sc=new Scanner(System.in); System.out.println("enter string for c"); String c=sc.next(); System.out.println("c is "+c); System.out.println("enter string for d"); String d=sc.next(); System.out.println("d is "+d); } } 

आउटपुट:

सी एबीसी डीईफ़ के लिए स्ट्रिंग दर्ज करें
सी एबीसी है

डी के लिए स्ट्रिंग दर्ज करें

डी डीईएफ़ है

यदि आप next () के बजाय अगले () का उपयोग करते हैं तो

आउटपुट:

सी के लिए स्ट्रिंग दर्ज करें

एबीसी डीईएफ
सी एबीसी डीईएफ है I
डी के लिए स्ट्रिंग दर्ज करें

GHI
घ जीएचआई है I

  • बस Scanner.next () और nextLine () का एक और उदाहरण के लिए नीचे की तरह है: nextLine () उपयोगकर्ता टाइप नहीं करता है, जबकि अगला () स्कैनर इंतजार करता है और इनपुट पढ़ता है।

      Scanner sc = new Scanner(System.in); do { System.out.println("The values on dice are :"); for(int i = 0; i < n; i++) { System.out.println(ran.nextInt(6) + 1); } System.out.println("Continue : yes or no"); } while(sc.next().equals("yes")); // while(sc.nextLine().equals("yes"));