JavaRush /جاوا بلاگ /Random-SD /جاوا ۾ اسڪينر ڪلاس

جاوا ۾ اسڪينر ڪلاس

گروپ ۾ شايع ٿيل
سلام! اسان جو اڄ جو سبق خاص هوندو! ان کان اڳ، جڏهن مسئلا حل ڪرڻ ۽ پروگرام لکڻ، الورورٿم سادو هو: اسان ڪجهه ڪوڊ لکون ٿا، مکيه() طريقو هلائيندا آهيون ، پروگرام اهو ڪري ٿو جيڪو ان جي گهربل آهي، ۽ نڪرندو آهي. پر هاڻي سڀ ڪجهه بدلجي ويندو! اڄ اسين سکنداسين ته ڪيئن واقعي پروگرام سان لهه وچڙ ۾ اچي: اسان ان کي سيکارينداسين ته اسان جي عملن جو جواب ڏيڻ! توهان شايد اڳ ۾ ئي سمجهي سگهون ٿا ته اسان هن سان ڪٿي وڃي رهيا آهيون. اسان هن ليڪچر کي جاوا ٻوليءَ جي هڪ ڪلاس جي تفصيلي تجزيي لاءِ وقف ڪنداسين - اسڪينر. هي ڪلاس مفيد ٿيندو جيڪڏهن توهان کي ڊيٽا پڙهڻ جي ضرورت آهي جيڪي صارف داخل ڪن ٿا. ان کان اڳ جو اسان ڪوڊ سکڻ تي اڳتي وڌون، مون کي ٻڌايو، ڇا توهان ڪڏهن اهڙي ڊيوائس کي اسڪينر وانگر ڏٺو آهي؟ ضرور ها. اسڪينر جي اندروني جوڙجڪ ڪافي پيچيده آهي، پر ان جي ڪم جو بنياد بلڪل سادو آهي: اهو ڊيٽا کي پڙهي ٿو جيڪو صارف ان ۾ داخل ٿئي ٿو (مثال طور، پاسپورٽ يا انشورنس پاليسي) ۽ پڙهيل معلومات کي ميموري ۾ محفوظ ڪري ٿو (مثال طور. ، هڪ تصوير جي صورت ۾). تنهن ڪري، اڄ توهان پنهنجو اسڪينر ٺاهيندا! يقينن، هو دستاويز نه ٿو سنڀالي سگهي، پر هو متن جي معلومات کي چڱي طرح سنڀالي سگهي ٿو :) اچو ته هلون!اسڪينر ڪلاس - 1

جاوا اسڪينر ڪلاس

سڀ کان پهرين ۽ سڀ کان اهم شيءِ جنهن سان اسان کي واقفيت حاصل ڪرڻ جي ضرورت آهي اها آهي ڪلاس java.util.Scanner. ان جي ڪارڪردگي تمام سادي آهي. هڪ حقيقي اسڪينر وانگر، اهو انهي ذريعن مان ڊيٽا پڙهي ٿو جيڪو توهان ان لاءِ بيان ڪيو آهي. مثال طور، هڪ لڪير کان، هڪ فائل مان، ڪنسول مان. پوءِ اھو ھن معلومات کي سڃاڻي ٿو ۽ ان کي ضرورت مطابق پروسيس ڪري ٿو. اچو ته آسان ترين مثال ڏيو:
public class Main {

   public static void main(String[] args) {

       Scanner scanner = new Scanner("I love you, Petra creation,\n" +
               "I love your stern, slim look,\n" +
               "Neva sovereign current,\n" +
               "Coastal granite");
       String s = scanner.nextLine();
       System.out.println(s);
   }
}
اسان هڪ اسڪينر اعتراض ٺاهيو ۽ ان لاءِ ڊيٽا جو ماخذ مقرر ڪيو (ٽيڪسٽ سان گڏ هڪ تار). طريقو nextLine()ڊيٽا ماخذ تائين پهچندو آهي (اسان جو متن quatrains سان)، اتي ايندڙ لائن ڳولي ٿو ته اهو اڃا تائين نه پڙهيو آهي (اسان جي صورت ۾، پهريون) ۽ ان کي واپس ڪري ٿو. جنهن کان پوءِ اسان ان کي ڪنسول ۾ آئوٽ ڪيو: ڪنسول آئوٽ:

Люблю тебя, Peterа творенье,
اسان طريقو nextLine()ڪيترائي ڀيرا استعمال ڪري سگھون ٿا ۽ نظم جو پورو ٽڪرو ڪڍي سگھون ٿا:
public class Main {

   public static void main(String[] args) {

       Scanner scanner = new Scanner("I love you, Petra creation,\n" +
               "I love your stern, slim look,\n" +
               "Neva sovereign current,\n" +
               "Coastal granite");
       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);
   }
}
هر دفعي اسان جو اسڪينر هڪ قدم اڳتي وڌندو ۽ ايندڙ لائن پڙهندو. پروگرام جو نتيجو ڪنسول ڏانهن ٻاھر آھي:

Люблю тебя, Peterа творенье,
Люблю твой строгий, стройный вид,
Невы державное теченье,
Береговой ее гранит
جيئن ته اسان اڳ ۾ ئي چيو آهي، اسڪينر لاء ڊيٽا جو ذريعو نه رڳو هڪ تار ٿي سگهي ٿو، پر پڻ، مثال طور، هڪ ڪنسول. اسان لاءِ اهم خبر: جيڪڏهن اڳي اسان صرف اتي ڊيٽا ڪڍندا هئاسين، هاڻي اسان ڪيبورڊ مان ڊيٽا داخل ڪنداسين! اچو ته ڏسون ته اسڪينر ڪلاس ٻيو ڇا ڪري سگھي ٿو :
public class Main {

   public static void main(String[] args) {

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

       int number = sc.nextInt();

       System.out.println("Thank you! You entered a number" + number);

   }
}
طريقو nextInt()پڙهي ٿو ۽ داخل ٿيل نمبر واپس ڪري ٿو. اسان جي پروگرام ۾، اهو استعمال ڪيو ويندو آهي هڪ قدر کي متغير کي تفويض ڪرڻ لاء number. هي هڪ حقيقي اسڪينر وانگر وڌيڪ ڏسڻ ۾ اچي ٿو! پروگرام صارف کان پڇي ٿو ته ڪنهن به نمبر کي لائن ۾ داخل ڪرڻ لاء. ان کان پوء صارف هن کي ڪيو آهي، پروگرام هن جي مهرباني، ڪنسول تي ان جي ڪم جو نتيجو ڏيکاري ٿو ۽ ختم ٿئي ٿو. پر اسان وٽ اڃا تائين ھڪڙو سنگين مسئلو آھي. استعمال ڪندڙ غلطي ڪري سگھي ٿو ۽ ڪجھ غلط داخل ڪري سگھي ٿو. هتي هڪ مثال آهي جڏهن اسان جو موجوده پروگرام ڪم ڪرڻ بند ڪري ڇڏيندو:
public class Main {

   public static void main(String[] args) {

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

       int number = sc.nextInt();

       System.out.println("Thank you! You entered a number" + number);

   }
}
اچو ته هڪ نمبر جي بدران "JavaRush" اسٽرنگ داخل ڪرڻ جي ڪوشش ڪريو: ڪنسول آئوٽ:
Enter the number:
JavaRush
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()- چيڪ ڪري ٿو ته ڇا ڊيٽا جو ايندڙ ٽڪرو هڪ تار آهي. hasNextByte(), hasNextShort(), hasNextLong(), hasNextFloat(), hasNextDouble()- اهي سڀئي طريقا ساڳيا آهن ٻين ڊيٽا جي قسمن لاءِ. اچو ته نمبر پڙهڻ لاءِ اسان جي پروگرام کي تبديل ڪرڻ جي ڪوشش ڪريون:
public class Main {

   public static void main(String[] args) {

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

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

   }
}
ھاڻي اسان جو پروگرام چيڪ ڪري ٿو ته ايندڙ اکر داخل ٿيل نمبر آھي يا نه. ۽ صرف جيڪڏھن اھو آھي، اھو ھڪڙي تصديق ڏيکاري ٿو. جيڪڏهن ان پٽ ٽيسٽ پاس نٿو ڪري، پروگرام هن کي نوٽيس ڪري ٿو ۽ توهان کي ٻيهر ڪوشش ڪرڻ لاء پڇي ٿو. لازمي طور تي، توهان اسڪينر اعتراض سان رابطو ڪري سگهو ٿا ۽ اڳ ۾ ڄاڻو ٿا ته ڪهڙي قسم جي ڊيٽا جي توقع آهي. ”اي، اسڪينر، اڳتي ڇا آهي؟ نمبر، تار، يا ٻيو ڪجهه؟ نمبر؟ ۽ ڪهڙو - int،، short؟ long" هي لچڪدار توهان کي موقعو ڏئي ٿو ته توهان جي پروگرام جي منطق کي ترتيب ڏيڻ جي بنياد تي صارف جي رويي تي. هڪ ٻيو اهم طريقو جنهن تي ڌيان ڏيڻ جي قابل آهي useDelimiter(). اهو طريقو گذري چڪو آهي اسٽرنگ جيڪو توهان استعمال ڪرڻ چاهيو ٿا ڊيليميٽر طور. مثال طور، اسان کي اوچتو جاپاني شاعريءَ ۾ دلچسپي پيدا ٿي ۽ عظيم شاعر ماتسوو باشو جا ڪيترائي هائيڪو پڙهڻ لاءِ اسڪينر استعمال ڪرڻ جو فيصلو ڪيو. جيتوڻيڪ ٽي مختلف آيتون اسان کي هڪ بيڪار لڪير ۾ ڏنيون وينديون آهن، اسان انهن کي آساني سان الڳ ڪري سگهون ٿا ۽ انهن کي چڱي طرح فارميٽ ڪري سگهون ٿا:
public class Main {
   public static void main(String[] args) {
       Scanner scan = new Scanner("On a Bare Branch" +
               "Raven sits alone.'" +
               "Autumn evening." +
               "''***''" +
               "There's such a moon in the sky,'" +
               "Like a tree cut down at the root:'" +
               "A fresh cut turns white." +
               "''***''" +
               "How the river has overflowed!" +
               "The heron wanders on short legs,'" +
               "Knee-deep in water.");

       scan.useDelimiter("'");

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

       scan.close();
   }
}
اسان استعمال ڪريون ٿا استعمال ڊيليميٽر () اسڪينر ڪلاس جو طريقو لڪير ڌار ڪندڙ جي طور تي : اهو ايندڙ ڊيٽا کي حصن ۾ ورهائڻ جو ذميوار آهي. اسان جي حالت ۾، هڪ واحد اقتباس ( "'" ) هڪ دليل جي طور تي منظور ڪيو ويو آهي ۽ جدا جدا اسٽرنگ لاء استعمال ڪيو ويندو آهي . هن اقتباس جي پٺيان متن هڪ نئين لائين تي ظاهر ٿئي ٿو ڇاڪاڻ ته جڏهن لوپ ۾ اسان ڊيٽا کي پڙهڻ لاء سسٽم ڪلاس جو println() طريقو استعمال ڪري رهيا آهيون . نتيجي طور، اسان وٽ ڪنسول ۾ هڪ خوبصورت پيداوار هوندي، جيئن ڪتابن ۾:
На голой ветке
Ворон сидит одиноко.
Осенний вечер.

*** 
 
В небе такая луна,
Словно дерево спилено под корень:
Белеет свежий срез.

*** 
 
Как разлилась река!
Цапля бредет на коротких ножках,
По колено в воде.
ساڳئي مثال ۾، هڪ وڌيڪ طريقو آهي جنهن تي توهان کي ضرور ڌيان ڏيڻ گهرجي - close(). ڪنهن به شئي وانگر جيڪو I/O اسٽريمز سان ڪم ڪري ٿو، اسڪينر کي بند ڪيو وڃي جڏهن اهو پنهنجو ڪم مڪمل ڪري ته جيئن اهو هاڻي اسان جي ڪمپيوٽر جا وسيلا استعمال نه ڪري. طريقو ڪڏهن به نه وساريو close()!
public class Main {

   public static void main(String[] args) {

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

       int number = sc.nextInt();

       System.out.println("Thank you! You entered a number" + number);

       sc.close();//Now we did everything right!

   }
}
اهو ئي سڀ ڪجهه آهي! جئين توهان ڏسي سگهو ٿا، اسڪينر ڪلاس استعمال ڪرڻ بلڪل آسان ۽ تمام مفيد آهي! :)
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION