जावा में स्कैनर का उपयोग कैसे करें

How Use Scanner Java



जावा में स्कैनर java.util पैकेज में एक वर्ग है। इस वर्ग का उद्देश्य स्ट्रिंग, कीबोर्ड, फ़ाइल या नेटवर्क सॉकेट से इनपुट पढ़ना है। यह लेख केवल कीबोर्ड से इनपुट पढ़ने और टर्मिनल विंडो पर परिणाम प्रदर्शित करने पर केंद्रित है। फ़ाइल या नेटवर्क चैनल से इनपुट पढ़ने के लिए इसी तरह के विचारों का उपयोग किया जा सकता है। स्कैनर टर्मिनल विंडो पर प्रिंट नहीं करता है। टर्मिनल पर प्रिंट करने के लिए, System.out ऑब्जेक्ट का उपयोग करें। टर्मिनल पर प्रिंट करने के लिए इस ऑब्जेक्ट का उपयोग करना आसान है, जैसा कि नीचे दिखाया गया है।

स्कैनर वर्ग का उपयोग करने के लिए, इसे पहले आयात करना होगा। उसके बाद, किसी वस्तु को उसमें से तत्काल करना होता है। स्कैनर ऑब्जेक्ट का इस्तेमाल करने के बाद उसे बंद करना पड़ता है। कीबोर्ड का प्रतिनिधित्व करने वाली इनपुट स्ट्रीम ऑब्जेक्ट System.in है। स्कैनर के कई तरीके हैं। इस लेख में केवल आमतौर पर उपयोग किए जाने वाले लोगों के बारे में बताया जाएगा।







लेख सामग्री



स्कैनर वर्ग का सरल उपयोग

निम्नलिखित कोड उपयोगकर्ता को एक वाक्य में टाइप करने के लिए कहता है, और फिर यह वाक्य प्रदर्शित करता है:



आयात java.util.स्कैनर;

सह लोक कक्षाकक्षा{
सह लोक स्थिर शून्यमुख्य( डोरी []args) {
स्कैनर स्कैनObj= नयाचित्रान्वीक्षक( प्रणाली .में);
प्रणाली .बाहर.प्रिंट्लन('एक वाक्य टाइप करें और एंटर दबाएं:');

डोरी वाक्य=स्कैनऑब्ज.अगली पंक्ति();
प्रणाली .बाहर.प्रिंट्लन(वाक्य);

स्कैनऑब्ज.बंद करे();
}
}

पहली पंक्ति स्कैनर वर्ग को आयात करती है। मुख्य फ़ंक्शन में, पहली पंक्ति कीबोर्ड के लिए System.in ऑब्जेक्ट का उपयोग करके एक स्कैनर ऑब्जेक्ट बनाती है। स्कैनर ऑब्जेक्ट बनते ही यह इनपुट का इंतजार करने लगता है। अगली पंक्ति एक कथन को प्रिंट करती है, उपयोगकर्ता को एक वाक्य में टाइप करने के लिए कहती है। कोड में निम्नलिखित पंक्ति, एंटर दबाने के बाद उपयोगकर्ता के वाक्य को पढ़ने के लिए स्कैनर ऑब्जेक्ट की अगली लाइन () विधि का उपयोग करती है। कोड के बाद की लाइन, टर्मिनल विंडो पर वाक्य को फिर से प्रिंट करती है। अंतिम पंक्ति स्कैनर ऑब्जेक्ट को बंद कर देती है।





मूल्यों में इनपुट लाइन थूकना

निम्नलिखित कोड इनपुट लाइन को शब्दों (टोकन) में विभाजित करता है, अंतरिक्ष को सीमांकक के रूप में उपयोग करता है:

आयात java.util.स्कैनर;

सह लोक कक्षाकक्षा{
सह लोक स्थिर शून्यमुख्य( डोरी []args) {
स्कैनर स्कैनObj= नयाचित्रान्वीक्षक( प्रणाली .में);
प्रणाली .बाहर.प्रिंट्लन('टोकन की एक पंक्ति टाइप करें, और एंटर दबाएं:');

जबकि(स्कैनऑब्ज.हैअगला()){
प्रणाली .बाहर.प्रिंट्लन(स्कैनऑब्ज.अगला());
}

स्कैनऑब्ज.बंद करे();
}
}

hasNext () और अगला () स्कैनर ऑब्जेक्ट के दो अन्य तरीके हैं। जब स्कैनर ऑब्जेक्ट किसी लाइन को पढ़ता है, तो वह उसे रखता है। अगला () अगले टोकन (शब्द) तक पहुँचता है। यदि कोई अन्य टोकन अभी तक एक्सेस नहीं किया गया है, तो hasNext () सही है।



दुर्भाग्य से, उपयोगकर्ता से अभी भी इस कोड के साथ विभाजन और पुनः प्रदर्शित करने के लिए इनपुट टाइप करने की अपेक्षा की जाती है। वह सब समाप्त करने के लिए, Ctrl+z दबाएं, और आपको कमांड प्रॉम्प्ट पर वापस आ जाना चाहिए।

उपरोक्त कोड में, सीमांकक अंतरिक्ष में टोकन को अलग करता है। एक और चरित्र का उपयोग किया जा सकता है। निम्न कोड अल्पविराम का उपयोग करता है। यदि आप कोड का परीक्षण करते हैं तो लूप को समाप्त करने के लिए Ctrl+z दबाना न भूलें।

आयात java.util.स्कैनर;

सह लोक कक्षाकक्षा{
सह लोक स्थिर शून्यमुख्य( डोरी []args) {
स्कैनर स्कैनObj= नयाचित्रान्वीक्षक( प्रणाली .में);
प्रणाली .बाहर.प्रिंट्लन('टोकन की एक पंक्ति टाइप करें, और एंटर दबाएं:');

स्कैनऑब्ज.उपयोग सीमांकक(',');

जबकि(स्कैनऑब्ज.हैअगला()){
प्रणाली .बाहर.प्रिंट्लन(स्कैनऑब्ज.अगला());
}

स्कैनऑब्ज.बंद करे();
}
}

यदि आपने कोड का परीक्षण किया है, तो आपने देखा होगा कि टोकन में रिक्त स्थान को टोकन (आउटपुट) के हिस्से के रूप में शामिल किया गया है। व्यंजक, scanObj.useDelimiter(,); इनपुट लाइन पढ़ने के बाद टाइप किया गया; यह वही है जो अल्पविराम, सीमांकक बनाता है।

आदिम डेटा प्रकारों को पढ़ना और मान्य करना

अगला बूलियन () विधि

निम्नलिखित कोड में, उपयोगकर्ता से उद्धरण के बिना या तो सही या गलत टाइप करने की अपेक्षा की जाती है और फिर एंटर कुंजी दबाएं यदि उपयोगकर्ता कुछ और टाइप करता है, जैसे हां या नहीं, तो एक त्रुटि संदेश प्रदर्शित होगा।

आयात java.util.स्कैनर;

सह लोक कक्षाकक्षा{
सह लोक स्थिर शून्यमुख्य( डोरी []args) {
प्रणाली .बाहर.प्रिंट('क्या आप 24 से ऊपर हैं? ');
स्कैनर स्कैनObj= नयाचित्रान्वीक्षक( प्रणाली .में);

बूलियनबीएल=स्कैनऑब्ज.अगला बूलियन();
अगर (बीएल== सच) {
प्रणाली .बाहर.प्रिंट्लन('आप 24 से अधिक हैं');
}
अन्यथा अगर (बीएल== झूठा) {
प्रणाली .बाहर.प्रिंट्लन('आप 24 साल से कम उम्र के हैं');
}

स्कैनऑब्ज.बंद करे();
}
}

चूंकि जावा एक त्रुटि संदेश जारी करेगा, जब तक कि इनपुट सही या गलत नहीं है, अन्यथा यदि अन्य के बजाय उपयोग किया गया है।

प्रिंट और प्रिंटलाइन के तरीकों के बीच का अंतर यह है कि प्रिंट वर्तमान लाइन पर इनपुट की अपेक्षा करता है, जबकि प्रिंटलाइन अगली लाइन पर इनपुट की अपेक्षा करता है।

अगलीबाइट () विधि

ASCII कैरेक्टर सेट के साथ, एक कैरेक्टर एक बाइट होता है। हालाँकि, कुछ पूर्वी वर्ण सेटों के साथ, एक वर्ण में एक से अधिक बाइट हो सकते हैं। चरित्र सेट से स्वतंत्र, अगलीबाइट विधि इनपुट के अगले बाइट को पढ़ती है और मान्य करती है। इस उद्देश्य के लिए निम्नलिखित कोड का उपयोग किया जा सकता है:

आयात java.util.स्कैनर;

सह लोक कक्षाकक्षा{
सह लोक स्थिर शून्यमुख्य( डोरी []args) {
प्रणाली .बाहर.प्रिंट('टाइप नंबर'<128, press Enter: ');
स्कैनर स्कैनObj= नयाचित्रान्वीक्षक( प्रणाली .में);

बाइटबीटी=स्कैनऑब्ज.अगलाबाइट();
प्रणाली .बाहर.प्रिंट्लन(बीटी);

स्कैनऑब्ज.बंद करे();
}
}

यदि इस कोड के लिए 127 से अधिक संख्या या वर्णमाला वर्ण इनपुट किया गया है, तो एक त्रुटि संदेश जारी किया जाएगा।

nextInt () विधि

इनपुट के रूप में अगला पूर्णांक टोकन भी मान्य और स्वीकार किया जा सकता है। निम्नलिखित कोड का उपयोग किया जा सकता है:

आयात java.util.स्कैनर;

सह लोक कक्षाकक्षा{
सह लोक स्थिर शून्यमुख्य( डोरी []args) {
प्रणाली .बाहर.प्रिंट('कोई भी पूर्णांक दर्ज करें:');
स्कैनर स्कैनObj= नयाचित्रान्वीक्षक( प्रणाली .में);

NSएक पर=स्कैनऑब्ज.अगलाइंट();
प्रणाली .बाहर.प्रिंट्लन(एक पर);

स्कैनऑब्ज.बंद करे();
}
}

अग्रणी या पिछली जगहों को हटा दिया गया है। इस कोड के लिए, 127 से अधिक मान सहित कोई भी पूर्णांक मान स्वीकार किया जाएगा। इन nextXXX () विधियों के साथ, एक बार सत्यापन विफल हो जाने पर, एक त्रुटि संदेश जारी किया जाता है।

अगलाबिगइंटर () विधि

ऐसा लगता है कि सॉफ्टवेयर इंजीनियर कभी भी नई चीजों के साथ आना बंद नहीं करेंगे। एक बड़ा पूर्णांक एक पूर्णांक होता है जिसका मान किसी पूर्णांक से बहुत बड़ा होता है। हालाँकि, जावा के साथ, इसे पूर्णांक की तरह ही पढ़ा जा सकता है। निम्नलिखित कोड इसे दिखाता है:

आयात java.util.स्कैनर;
आयात java.math.BigInteger;

सह लोक कक्षाकक्षा{
सह लोक स्थिर शून्यमुख्य( डोरी []args) {
प्रणाली .बाहर.प्रिंट्लन('बिग इंटीजर के लिए कोई भी पूर्णांक दर्ज करें:');
स्कैनर स्कैनObj= नयाचित्रान्वीक्षक( प्रणाली .में);

बड़ा पूर्णांक एक पर=स्कैनऑब्ज.अगलाबिगइंटीजर();
प्रणाली .बाहर.प्रिंट्लन(एक पर);

स्कैनऑब्ज.बंद करे();
}
}

आयात विवरण पर ध्यान दें, java.math.BigInteger आयात करें;। साथ ही, ध्यान दें कि बड़ा पूर्णांक प्रकार अपरकेस बी से शुरू होता है न कि लोअरकेस बी से।

nextFloat () विधि

इनपुट के रूप में अगला फ्लोट टोकन भी मान्य और स्वीकार किया जा सकता है। निम्नलिखित कोड का उपयोग किया जा सकता है:

आयात java.util.स्कैनर;

सह लोक कक्षाकक्षा{
सह लोक स्थिर शून्यमुख्य( डोरी []args) {
प्रणाली .बाहर.प्रिंट('कोई भी फ्लोट दर्ज करें:');
स्कैनर स्कैनObj= नयाचित्रान्वीक्षक( प्रणाली .में);

पानी पर तैरनाएक पर=स्कैनऑब्ज.अगलाफ्लोट();
प्रणाली .बाहर.प्रिंट्लन(एक पर);

स्कैनऑब्ज.बंद करे();
}
}

फ्लोट नंबर का एक उदाहरण 23.456 है। अग्रणी या पिछली जगहों को हटा दिया गया है।

अगला डबल ()

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

आयात java.util.स्कैनर;

सह लोक कक्षाकक्षा{
सह लोक स्थिर शून्यमुख्य( डोरी []args) {
प्रणाली .बाहर.प्रिंट('कोई भी दोहरा दर्ज करें:');
स्कैनर स्कैनObj= नयाचित्रान्वीक्षक( प्रणाली .में);

दोहराएक पर=स्कैनऑब्ज.अगलाडबल();
प्रणाली .बाहर.प्रिंट्लन(एक पर);

स्कैनऑब्ज.बंद करे();
}
}

दोहरी संख्या का एक उदाहरण 23.456 है। एक डबल नंबर एक फ्लोट से अलग होता है क्योंकि इसमें त्रुटि का मार्जिन कम होता है। अग्रणी या पिछली जगहों को हटा दिया गया है।

नेक्स्टलाइन () विधि

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

आयात java.util.स्कैनर;

सह लोक कक्षाकक्षा{
सह लोक स्थिर शून्यमुख्य( डोरी []args) {
प्रणाली .बाहर.प्रिंट्लन('एक पंक्ति दर्ज करें जिसमें\एन : ');
स्कैनर स्कैनObj= नयाचित्रान्वीक्षक( प्रणाली .में);

डोरी पी=स्कैनऑब्ज.अगली पंक्ति();
प्रणाली .बाहर.प्रिंट्लन(पी);

स्कैनऑब्ज.बंद करे();
}
}

ध्यान दें कि स्ट्रिंग प्रकार अपरकेस S से शुरू होता है न कि लोअरकेस s से।

इस लेख में पहले नेक्स्टलाइन (), है नेक्स्ट () और नेक्स्ट () विधियों का उपयोग किया गया है। स्कैनर में अन्य विधियाँ और अन्य आदिम डेटा विधियाँ हैं - बाद में देखें।

एक वैरिएबल को इनपुट असाइन करना

इनपुट को एक चर को सौंपा जा सकता है, जैसा कि निम्न कोड दिखाता है:

आयात java.util.स्कैनर;

सह लोक कक्षाकक्षा{
सह लोक स्थिर शून्यमुख्य( डोरी []args) {
स्कैनर स्कैनObj= नयाचित्रान्वीक्षक( प्रणाली .में);

प्रणाली .बाहर.प्रिंट('नाम दर्ज: ');
डोरी नाम=स्कैनऑब्ज.अगली पंक्ति();

प्रणाली .बाहर.प्रिंट('आयु दर्ज करें:');
NSउम्र=स्कैनऑब्ज.अगलाइंट();

प्रणाली .बाहर.प्रिंट('वेतन दर्ज करें:');
दोहरावेतन=स्कैनऑब्ज.अगलाडबल();

प्रणाली .बाहर.प्रिंट्लन('नाम: ' +नाम+ ', उम्र: ' +उम्र+ ', वेतन: ' +वेतन);

स्कैनऑब्ज.बंद करे();
}
}

निष्कर्ष

जावा में स्कैनर java.util पैकेज में एक वर्ग है। इस वर्ग का उद्देश्य स्ट्रिंग, कीबोर्ड, फ़ाइल या नेटवर्क सॉकेट से इनपुट पढ़ना है। यह लेख मुख्य रूप से कीबोर्ड से इनपुट पढ़ने और टर्मिनल विंडो पर परिणाम प्रदर्शित करने पर केंद्रित है। स्ट्रिंग, फ़ाइल या नेटवर्क चैनल से इनपुट पढ़ने के लिए इसी तरह के विचारों का उपयोग किया जा सकता है।

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

आदिम मूल्यों को nextBoolean (), nextByte (), nextInt (), आदि का उपयोग करके पढ़ा जा सकता है। ये nextXXX () विधियाँ सत्यापन करती हैं, और अग्रणी और अनुगामी रिक्त स्थान को भी हटाती हैं।

Java Scanner में और भी कई तरीके हैं। हालाँकि, इस लेख में स्कैनर के मूल उपयोग के बारे में बताया गया है। टोकन का चयन वास्तव में नियमित अभिव्यक्ति तकनीकों का उपयोग करके किया जाता है। कुछ और समय के लिए नियमित अभिव्यक्ति तकनीकों का उपयोग चर्चा है।