CodeGym/Java-blogg/Tilfeldig/Java-skannerklasse
John Squirrels
Nivå
San Francisco

Java-skannerklasse

Publisert i gruppen
Hei! Leksjonen vår i dag vil være spesiell! I dagens leksjon skal vi snakke om Java Scanner Class. Tidligere var prosessen med å fullføre oppgaver og skrive programmer enkel: vi skriver litt kode, kjører main ()metoden gjør programmet det som kreves, og vi er ferdige. Men nå vil alt endre seg! I dag skal vi lære hvordan du virkelig samhandler med programmet: vi lærer det hvordan det skal reagere på handlingene våre! Før vi begynner å analysere koden, har du noen gang måttet forholde deg til en enhet som en skanner? Sannsynligvis. Innsiden av en skanner er ganske komplisert, men den grunnleggende ideen om hvordan den fungerer er veldig enkel: den leser data som brukeren gir (som pass eller forsikring) og lagrer denne informasjonen i minnet (for eksempel som et bilde ). I dag skal du lage din egen skanner! Selvfølgelig vil den ikke kunne håndtere papirdokumenter, men tekst vil ikke være noe problem for den :) La oss gå!

Javas skannerklasse

Skannerklasse - 1Først og fremst må vi gjøre oss kjent med java.util.Scanner -klassen. Dens funksjonalitet er veldig enkel. Som en ekte skanner leser den data fra en kilde du spesifiserer. For eksempel en streng, en fil, konsollen. Deretter gjenkjenner den informasjonen og behandler den på riktig måte. Her er det enkleste eksemplet:
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);
   }
}
Vi har laget et skannerobjekt og spesifisert datakilden (en tekststreng). NextLine () -metoden får tilgang til datakilden (teksten vår med et kvad), finner den neste uleste linjen (som er den første linjen i dette tilfellet), og returnerer den. Så viser vi det på konsollen: Konsollutgang:
It matters not how strait the gate,
Vi kan bruke nextLine() -metoden flere ganger og vise hele diktutdraget:
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);
   }
}
Hver gang tar skanneren vår ett skritt fremover og leser neste linje. Programmets utgang vises:
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
Som vi allerede har sagt, trenger ikke skannerens datakilde å være en streng. Det kan for eksempel være konsollen. Noen spennende nyheter for deg: tidligere viste vi nettopp data der, men nå skal vi lese data fra tastaturet! La oss se hva annet Scanner -klassen gjør:
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 () -metoden leser og returnerer det angitte tallet. I programmet vårt bruker vi det til å tilordne en verdi til variabelnummeret . Det er allerede mer som en ekte skanner! Programmet ber brukeren angi et hvilket som helst tall. Etter at brukeren har gjort dette, takker programmet brukeren, viser resultatet og fullfører. Men vi har fortsatt et alvorlig problem. Brukeren kan gjøre en feil og skrive inn noe feil. Her er et eksempel der vårt nåværende program slutter å fungere:
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);

   }
}
La oss prøve å skrive inn strengen "CodeGym" i stedet for et tall: Konsollutgang:
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
UH oh. Vi er i store problemer -_- For å unngå slike situasjoner, må vi finne en måte å bekrefte dataene som er lagt inn av brukeren. Hvis brukeren for eksempel skriver inn noe annet enn et tall, vil det være greit å vise en advarsel om at den angitte informasjonen ikke er et tall. Og hvis informasjonen er i orden, kan vi bekrefte. Men dette ville kreve at vi "se inn i fremtiden" for å se hva som kommer i strømmen vår. Kan skanneren gjøre dette? Og hvordan! Og den har en rekke metoder for å gjøre dette: hasNextInt() — Denne metoden sjekker om neste del av inndata er et tall (returnerer sant eller usant, etter behov). hasNextLine() — Denne metoden sjekker om neste del av input er en streng. hasNextByte() ,hasNextShort() , hasNextLong() , hasNextFloat() , hasNextDouble() — Alle disse metodene utfører lignende kontroller for de gjenværende datatypene. La oss prøve å endre nummerleseprogrammet vårt:
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!");
       }

   }
}
Nå sjekker programmet vårt om det neste tegnet som legges inn er et tall. Og det viser bekreftelse bare hvis det er det. Hvis inndata ikke passerer kontrollen, tar programmet notat og ber brukeren prøve på nytt. I utgangspunktet kan du kommunisere med Scanner- objektet og finne ut på forhånd hvilken datatype som venter deg. Et tall, en streng eller noe annet? Et tall? Og hva slags? An int , short , long ?" Denne fleksibiliteten gir deg muligheten til å bygge programlogikk som avhenger av brukerens atferd. Vi bør merke oss en annen viktig metode: useDelimiter() . Du sender en streng til denne metoden. Strengen inneholder tegn du vil bruke som skilletegn eller skilletegn. Anta for eksempel at vi plutselig ble interessert i japansk poesi, og bestemte oss for å bruke skanneren vår til å lese litt haiku skrevet av den store poeten Matsuo Bashō. Selv om tre forskjellige vers sendes til oss som en vanskelig streng, kan vi enkelt dele dem og gjengi dem vakkert:
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();
   }
}
Vi bruker "\ n /*/*/*" (nytt linjetegn og tre stjerner) som skilletegn. Som et resultat har vi vakker konsollutgang, akkurat som i bøker:
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.
Dette eksemplet har en metode til som vi absolutt må påpeke: close() . Som ethvert objekt som arbeider med I/O-strømmer, må skanneren lukkes når den er ferdig slik at den slutter å forbruke datamaskinens ressurser. Glem aldri close() -metoden!
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!

   }
}
Det er det! Som du kan se, for hvor nyttig den er, er Scanner- klassen ganske enkel å bruke! :) For å forsterke det du lærte, foreslår vi at du ser en videoleksjon fra Java-kurset vårt
Kommentarer
  • Populær
  • Ny
  • Gammel
Du må være pålogget for å legge igjen en kommentar
Denne siden har ingen kommentarer ennå