CodeGym /Java Blog /अनियमित /जावा स्कैनर वर्ग
John Squirrels
स्तर 41
San Francisco

जावा स्कैनर वर्ग

अनियमित ग्रुप में प्रकाशित
नमस्ते! आज का हमारा पाठ होगा खास! आज के पाठ में हम जावा स्कैनर क्लास के बारे में बात करेंगे। पहले, कार्यों को पूरा करने और कार्यक्रम लिखने की प्रक्रिया सरल थी: हम कुछ कोड लिखते हैं, मुख्य चलाते हैं ()विधि, प्रोग्राम वह करता है जो आवश्यक होता है, और हमारा काम हो गया। लेकिन अब सब कुछ बदलेगा! आज हम सीखेंगे कि वास्तव में कार्यक्रम के साथ कैसे बातचीत करें: हम इसे सिखाएंगे कि हमारे कार्यों का जवाब कैसे दें! इससे पहले कि हम कोड का विश्लेषण करना शुरू करें, क्या आपको कभी स्कैनर जैसे उपकरण से निपटना पड़ा है? शायद। स्कैनर के अंदर का भाग काफी जटिल होता है, लेकिन यह कैसे काम करता है इसका मूल विचार बहुत सरल है: यह उपयोगकर्ता द्वारा प्रदान किए गए डेटा (जैसे पासपोर्ट या बीमा पॉलिसी) को पढ़ता है और इस जानकारी को स्मृति में संग्रहीत करता है (उदाहरण के लिए, एक छवि के रूप में) ). आज आप अपना स्कैनर बनाने जा रहे हैं! बेशक, यह कागजी दस्तावेजों को संभालने में सक्षम नहीं होगा, लेकिन टेक्स्ट को इसके लिए कोई समस्या नहीं होगी :) चलो चलें!

जावा की स्कैनर क्लास

स्कैनर वर्ग - 1सबसे पहले और सबसे महत्वपूर्ण, हमें java.util.Scanner क्लास से परिचित होना चाहिए। इसकी कार्यक्षमता बहुत ही सरल है। वास्तविक स्कैनर की तरह, यह आपके द्वारा निर्दिष्ट स्रोत से डेटा पढ़ता है। उदाहरण के लिए, एक स्ट्रिंग, एक फाइल, कंसोल। अगला, यह सूचना को पहचानता है और इसे उचित रूप से संसाधित करता है। यहाँ सबसे सरल उदाहरण है:

public class Main {

   public static void main(String[] args) {

       Scanner scanner = new Scanner("It matters not how strait the gate,\n" +
               "How charged with punishments the scroll,\n" +
               "I am the master of my fate,\n" +
               "I am the captain of my soul");
       String s = scanner.nextLine();
       System.out.println(s);
   }
}
हमने एक स्कैनर ऑब्जेक्ट बनाया है, और इसके डेटा स्रोत (टेक्स्ट की एक स्ट्रिंग) को निर्दिष्ट किया है। अगली पंक्ति () विधि डेटा स्रोत (एक क्वाट्रेन के साथ हमारा पाठ) तक पहुँचती है, अगली अपठित पंक्ति (जो इस मामले में पहली पंक्ति है) को खोजती है, और उसे लौटाती है। फिर हम इसे कंसोल पर प्रदर्शित करते हैं: कंसोल आउटपुट:

It matters not how strait the gate,
हम अगली पंक्ति () पद्धति का कई बार उपयोग कर सकते हैं और पूरी कविता का अंश प्रदर्शित कर सकते हैं:

public class Main {

   public static void main(String[] args) {

       Scanner scanner = new Scanner("It matters not how strait the gate,\n" +
               "How charged with punishments the scroll,\n" +
               "I am the master of my fate,\n" +
               "I am the captain of my soul");
       String s = scanner.nextLine();
       System.out.println(s);
       s = scanner.nextLine();
       System.out.println(s);
       s = scanner.nextLine();
       System.out.println(s);
       s = scanner.nextLine();
       System.out.println(s);
   }
}
हर बार, हमारा स्कैनर एक कदम आगे बढ़कर अगली पंक्ति पढ़ता है। कार्यक्रम का आउटपुट प्रदर्शित होता है:

It matters not how strait the gate, 
How charged with punishments the scroll, 
I am the master of my fate, 
I am the captain of my soul
जैसा कि हमने पहले ही कहा है, स्कैनर के डेटा स्रोत का स्ट्रिंग होना आवश्यक नहीं है। उदाहरण के लिए, यह कंसोल हो सकता है। आपके लिए कुछ रोमांचक समाचार: पहले, हम वहां केवल डेटा प्रदर्शित करते थे, लेकिन अब हम कीबोर्ड से डेटा पढ़ेंगे! आइए देखें कि स्कैनर वर्ग और क्या करता है:

public class Main {

   public static void main(String[] args) {

       Scanner sc = new Scanner(System.in);
       System.out.println("Enter a number:");

       int number = sc.nextInt();

       System.out.println("Thanks! You entered the number " + number);

   }
}
NextInt () विधि दर्ज की गई संख्या को पढ़ती है और वापस करती है। हमारे प्रोग्राम में, हम इसका उपयोग वेरिएबल number को वैल्यू असाइन करने के लिए करते हैं । यह पहले से ही वास्तविक स्कैनर की तरह है! कार्यक्रम उपयोगकर्ता को कोई भी संख्या दर्ज करने के लिए कहता है। उपयोगकर्ता द्वारा ऐसा करने के बाद, प्रोग्राम उपयोगकर्ता को धन्यवाद देता है, परिणाम प्रदर्शित करता है, और समाप्त करता है। लेकिन हमें अभी भी एक गंभीर समस्या है। उपयोगकर्ता गलती कर सकता है और कुछ गलत दर्ज कर सकता है। यहाँ एक उदाहरण है जहाँ हमारा वर्तमान कार्यक्रम काम करना बंद कर देता है:

public class Main {

   public static void main(String[] args) {

       Scanner sc = new Scanner(System.in);
       System.out.println("Enter a number:");

       int number = sc.nextInt();

       System.out.println("Thanks! You entered the number " + number);

   }
}
आइए संख्या के बजाय "CodeGym" स्ट्रिंग दर्ज करने का प्रयास करें: कंसोल आउटपुट:

Enter a number: 
CodeGym 
Exception in thread "main" java.util.InputMismatchException 
at java.util.Scanner.throwFor(Scanner.java:864) 
at java.util.Scanner.next(Scanner.java:1485) 
at java.util.Scanner.nextInt(Scanner.java:2117) 
at java.util.Scanner.nextInt(Scanner.java:2076) 
at Main.main(Main.java:10) Process finished with exit code 1
उह ओह। हम बड़ी मुसीबत में हैं -_- ऐसी स्थितियों से बचने के लिए, हमें उपयोगकर्ता द्वारा दर्ज किए गए डेटा को सत्यापित करने का तरीका खोजने की आवश्यकता है। उदाहरण के लिए, यदि उपयोगकर्ता संख्या के अलावा कुछ भी दर्ज करता है, तो चेतावनी प्रदर्शित करना अच्छा होगा कि दर्ज की गई जानकारी संख्या नहीं है। और अगर जानकारी ठीक है, तो हम पुष्टि कर सकते हैं। लेकिन इसके लिए हमें "भविष्य में देखने" की आवश्यकता होगी, यह देखने के लिए कि हमारी धारा में क्या आ रहा है। क्या स्कैनर ऐसा कर सकता है? और कैसे! और इसके पास ऐसा करने के लिए कई तरीके हैं: hasNextInt() — यह विधि जांचती है कि इनपुट डेटा का अगला हिस्सा एक संख्या है (उचित रूप से सही या गलत देता है)। hasNextLine () - यह विधि जाँचती है कि इनपुट का अगला हिस्सा एक स्ट्रिंग है या नहीं। हैनेक्स्टबाइट () ,hasNextShort() , hasNextLong() , hasNextFloat() , hasNextDouble() - ये सभी विधियाँ शेष डेटा प्रकारों के लिए समान जाँच करती हैं। आइए अपने नंबर-रीडिंग प्रोग्राम को बदलने की कोशिश करें:

public class Main {

   public static void main(String[] args) {

       Scanner sc = new Scanner(System.in);
       System.out.println("Enter a number:");

       if (sc.hasNextInt()) {
           int number = sc.nextInt();
           System.out.println("Thanks! You entered the number " + number);
       } else {
           System.out.println("Sorry, but this is clearly not a number. Restart the program and try again!");
       }

   }
}
अब हमारा प्रोग्राम जाँचता है कि दर्ज किया गया अगला वर्ण एक संख्या है या नहीं। और यह केवल तभी पुष्टि प्रदर्शित करता है जब यह है। यदि इनपुट चेक पास नहीं करता है, तो प्रोग्राम नोट करता है और उपयोगकर्ता को फिर से प्रयास करने के लिए कहता है। मूल रूप से, आप स्कैनर ऑब्जेक्ट के साथ संवाद कर सकते हैं और पहले से पता लगा सकते हैं कि कौन सा डेटा प्रकार आपकी प्रतीक्षा कर रहा है। एक संख्या, स्ट्रिंग, या कुछ और? एक संख्या? और किस तरह का? एक int , छोटा , लंबा ?" यह लचीलापन आपको प्रोग्राम लॉजिक बनाने का अवसर देता है जो उपयोगकर्ता के व्यवहार पर निर्भर करता है। हमें एक और महत्वपूर्ण विधि पर ध्यान देना चाहिए: useDelimiter() । आप इस विधि के लिए एक स्ट्रिंग पास करते हैं। स्ट्रिंग में शामिल है वे वर्ण जिन्हें आप विभाजक या सीमांकक के रूप में उपयोग करना चाहते हैं। उदाहरण के लिए, मान लीजिए कि हमें अचानक जापानी कविता में दिलचस्पी हो गई, और हमने महान कवि मात्सुओ बाशो द्वारा लिखे गए कुछ हाइकू को पढ़ने के लिए अपने स्कैनर का उपयोग करने का फैसला किया। यहां तक ​​कि अगर तीन अलग-अलग छंद हमें एक अजीब स्ट्रिंग के रूप में पास किए जाते हैं, तो हम उन्हें आसानी से विभाजित कर सकते हैं और उन्हें खूबसूरती से प्रस्तुत कर सकते हैं:

public class Main {
   public static void main(String[] args) {
       Scanner scan = new Scanner("On a withered branch'" +
               "A crow has alighted.'" +
               "Nightfall in autumn." +
               "''***''" +
               "Such a moon above,'" +
               "Like a tree cut at the root:'" +
               "he fresh cut is white." +
               "''***''" +
               "How the river floods!'" +
               "A heron wanders on short legs,'" +
               "Knee-deep in the water.");

       scan.useDelimiter("'");

       while (scan.hasNext()) {
           System.out.println(scan.next());
       }

       scan.close();
   }
}
हम अपने सीमांकक के रूप में "\ n /*/*/*" (नई पंक्ति वर्ण और तीन तारांकन) का उपयोग करते हैं। नतीजतन, हमारे पास किताबों की तरह ही सुंदर कंसोल आउटपुट है:
On a withered branch 
A crow has alighted. 
Nightfall in autumn. 

*** 

Such a moon above, 
Like a tree cut at the root: 
The fresh cut is white. 

*** 

How the river floods! 
A heron wanders on short legs, 
Knee-deep in the water.
इस उदाहरण में एक और तरीका है जिसे हमें बिल्कुल इंगित करना चाहिए: करीब () । I/O स्ट्रीम के साथ काम करने वाली किसी भी वस्तु की तरह, स्कैनर को पूरा होने पर बंद कर देना चाहिए ताकि यह कंप्यूटर के संसाधनों का उपभोग करना बंद कर दे। बंद करें () विधि को कभी न भूलें !

public class Main {

   public static void main(String[] args) {

       Scanner sc = new Scanner(System.in);
       System.out.println("Enter a number:");

       int number = sc.nextInt();

       System.out.println("Thanks! You entered the number " + number);
      
       sc.close(); // Now we've done everything right!

   }
}
इतना ही! जैसा कि आप देख सकते हैं, यह कितना मददगार है, स्कैनर वर्ग का उपयोग करना काफी आसान है! :) आपने जो सीखा है उसे सुदृढ़ करने के लिए, हमारा सुझाव है कि आप हमारे जावा कोर्स से एक वीडियो सबक देखें
टिप्पणियां
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION