CodeGym/Java Blogu/Rastgele/Java Tarayıcı Sınıfı
John Squirrels
Seviye
San Francisco

Java Tarayıcı Sınıfı

grupta yayınlandı
MERHABA! Bugünkü dersimiz özel olacak! Bugünün dersinde Java Tarayıcı Sınıfı hakkında konuşacağız. Önceden, görevleri tamamlama ve program yazma süreci basitti: bazı kodlar yazıyoruz, main() komutunu çalıştırıyoruz.yöntem, program gerekeni yapar ve işimiz biter. Ama şimdi her şey değişecek! Bugün programla gerçekten nasıl etkileşim kuracağımızı öğreneceğiz: ona eylemlerimize nasıl tepki vereceğini öğreteceğiz! Kodu analiz etmeye başlamadan önce, hiç tarayıcı gibi bir cihazla uğraşmak zorunda kaldınız mı? Muhtemelen. Bir tarayıcının içi oldukça karmaşıktır, ancak nasıl çalıştığına ilişkin temel fikir çok basittir: kullanıcının sağladığı verileri (pasaport veya sigorta poliçesi gibi) okur ve bu bilgileri bellekte saklar (örneğin, bir görüntü olarak). ). Bugün kendi tarayıcınızı yaratacaksınız! Elbette kağıt belgeleri işleyemez, ancak metin onun için sorun olmaz :) Hadi gidelim!

Java'nın Tarayıcı sınıfı

Tarayıcı sınıfı - 1Öncelikle java.util.Scanner sınıfını tanımalıyız . İşlevselliği çok basittir. Gerçek bir tarayıcı gibi, belirttiğiniz bir kaynaktan veri okur. Örneğin, bir dizi, bir dosya, konsol. Ardından, bilgileri tanır ve uygun şekilde işler. İşte en basit örnek:
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);
   }
}
Bir tarayıcı nesnesi oluşturduk ve veri kaynağını (bir metin dizisi) belirledik. nextLine () yöntemi, veri kaynağına (dörtlü metnimiz) erişir, bir sonraki okunmamış satırı (bu durumda ilk satırdır) bulur ve onu döndürür. Ardından konsolda görüntülüyoruz: Konsol çıktısı:
It matters not how strait the gate,
nextLine() yöntemini birkaç kez kullanabilir ve tüm şiir alıntısını görüntüleyebiliriz:
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);
   }
}
Tarayıcımız her seferinde bir adım ileri gider ve bir sonraki satırı okur. Programın çıktısı görüntülenir:
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
Daha önce söylediğimiz gibi, tarayıcının veri kaynağının bir dizi olması gerekmez. Örneğin, konsol olabilir. Size bazı heyecan verici haberler: Daha önce orada sadece verileri gösteriyorduk, ancak şimdi verileri klavyeden okuyacağız! Scanner sınıfının başka neler yaptığına bakalım :
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 () yöntemi, girilen sayıyı okur ve döndürür. Programımızda, sayı değişkenine bir değer atamak için kullanıyoruz . Zaten daha çok gerçek bir tarayıcı gibi! Program kullanıcıdan herhangi bir sayı girmesini ister. Kullanıcı bunu yaptıktan sonra program kullanıcıya teşekkür eder, sonucu gösterir ve bitirir. Ama hala ciddi bir sorunumuz var. Kullanıcı bir hata yapabilir ve yanlış bir şey girebilir. İşte mevcut programımızın çalışmayı durdurduğu bir örnek:
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);

   }
}
Sayı yerine "CodeGym" dizesini girmeyi deneyelim: Konsol çıktısı:
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
Ah, ah. Başımız büyük belada -_- Bu tür durumlarla karşılaşmamak için, kullanıcının girdiği verileri doğrulamanın bir yolunu bulmalıyız. Örneğin, kullanıcı sayı dışında bir şey girerse, girilen bilginin sayı olmadığına dair bir uyarı görüntülenmesi iyi olur. Ve eğer bilgi tamamsa, onaylayabiliriz. Ancak bu, akışımıza neyin geldiğini görmek için "geleceğe bakmamızı" gerektirecektir. Tarayıcı bunu yapabilir mi ? Ve nasıl! Ve bunu yapmak için çok sayıda yöntemi vardır: hasNextInt() — Bu yöntem, bir sonraki girdi verisi yığınının bir sayı olup olmadığını kontrol eder (uygunsa doğru veya yanlış döndürür). hasNextLine() — Bu yöntem, bir sonraki giriş yığınının bir dize olup olmadığını kontrol eder. hasNextByte() ,hasNextShort() , hasNextLong() , hasNextFloat() , hasNextDouble() — Tüm bu yöntemler, kalan veri türleri için benzer kontroller gerçekleştirir. Sayı okuma programımızı değiştirmeyi deneyelim:
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!");
       }

   }
}
Şimdi programımız girilen bir sonraki karakterin bir sayı olup olmadığını kontrol eder. Ve yalnızca öyleyse onay görüntüler. Giriş kontrolü geçemezse, program not alır ve kullanıcıdan tekrar denemesini ister. Temel olarak, Tarayıcı nesnesi ile iletişim kurabilir ve sizi hangi veri türünün beklediğini önceden öğrenebilirsiniz . Bir sayı mı, dizi mi yoksa başka bir şey mi? Bir sayı? Ve ne tür? int , short , long ?" Bu esneklik size kullanıcının davranışına bağlı program mantığı oluşturma fırsatı verir. Bir başka önemli yöntemi not etmeliyiz: useDelimiter() . Bu yönteme bir dize iletirsiniz. Ayırıcı veya sınırlayıcı olarak kullanmak istediğiniz karakterler. Örneğin, aniden Japon şiiriyle ilgilenmeye başladığımızı ve büyük şair Matsuo Bashō tarafından yazılmış bazı haikuları okumak için tarayıcımızı kullanmaya karar verdiğimizi varsayalım. Üç farklı ayet bize tek bir garip dize olarak geçse bile, onları kolayca ayırabilir ve güzel bir şekilde tercüme edebiliriz:
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();
   }
}
Ayırıcımız olarak "\ n /*/*/*" (yeni satır karakteri ve üç yıldız) kullanıyoruz . Sonuç olarak, tıpkı kitaplardaki gibi güzel bir konsol çıktımız var:
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.
Bu örnekte mutlaka belirtmemiz gereken bir yöntem daha vardır: close() . G/Ç akışlarıyla çalışan herhangi bir nesne gibi, tarayıcı da bilgisayarın kaynaklarını tüketmeyi durdurmak için bittiğinde kapatılmalıdır. close() yöntemini asla unutmayın !
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!

   }
}
Bu kadar! Gördüğünüz gibi, ne kadar yararlı olursa olsun, Scanner sınıfının kullanımı oldukça kolaydır! :) Öğrendiklerinizi pekiştirmek için Java Kursumuzdan bir video dersi izlemenizi öneririz.
Yorumlar
  • Popüler
  • Yeni
  • Eskimiş
Yorum bırakmak için giriş yapmalısınız
Bu sayfada henüz yorum yok