Clase scanner en Java


Hace poco revisando informacion y continuando con mi preparacion para rendir mi examen de certificacion java, me tope con nuevas implementaciones que se han realizado al JDK, sobre todo en la optimizacion de memoria; una de ellas es una clase interesante el cual se ha implementado a partir del JDK 1.5 (5.0), llamada scanner, el cual deriva del paquete java.util una de la forma mas simples de utilizar esta clase es lo que normalmente haciamos para poder obtener datos desde el teclado, lo que haciamos era lo siguiente:

 buffer.png

Bueno ahora con la implementacion de esta clase scanner, nos podemos ahorrar algo de codigo y hacerlo de la siguiente forma:

scanner.png

About these ads

27 thoughts on “Clase scanner en Java

  1. Un saludo.
    Le agradeceria enormemente que me hablase un poco mas de esta clase. Me resulta muy confusa y ademas un poco rara. Me serviria mucho saber el punto de vista de un colega adicto java por eso recurro a usted. Si no fuera mucha molesta le agradeceria se comunicase con migo explicando de manera un poco mas amplia esta clase Scanner, a ramonborquez@hotmail.com.

    le doy las gracias de antemano por lo mas valioso del ser humano, su tiempo. Gracias.

  2. mi pregunta es si me podria esplicar la classe escaner y por favor noser tan formal con la explicacion

    de donde puedo bajar los java docs completo con todos sus clases

    por favor

  3. Holaaa…

    probe los codigos: En el primero al digitar “hola mundo”, en realidad me sale “hola mundo”.
    Pero al digitar el mismo texto utilizando la clase escaner solo me sale el “hola”.

    Como hacer para que interprete toda la cadena?

    gracias y saludos.

  4. ¡Hola! Para quienes estén interesados en incursionar acerca de la clase Scanner del paquete java.util, les recomiendo que echen un vistazo a la séptima edición del libro de Cómo Programa en Java de Deitel & Deitel. ¡Hasta pronto!

  5. muchas gracias por la informacion , pero me gustaria saber mas sobre esta clase y apenas estoy empezando con programacion java entonces me gustaria una explicacion con un lenguaje mas comun
    gracias

  6. Podria alguien ayudarme, tengo un problema con el scanner, al parecer mi compilador no reconoce esta clase. Ya intenté varios procedimientos pero no queda. No puedo ejecutar los programas que piden datos del teclado.

  7. Hola no se si alguien me podria orientar el problema es:

    dentro de un ciclo capturo 2 tipos de datos en String y un float, en la primer pasada, pide los datos correctamente, en la segunda pasada se brinca donde donde se tiene que capturar el valor String..

    **Estoy usando la clase Scanner..
    Gracias..

    • Hola Yolanda, gracias por darte una vuelta por el blog. Bueno tal vez podrías colocar parte del código para poder ver en que te podemos ayudar.

      Saludos.

      • Si gracias, aqui esta el segmento de codigo.

        public static void main(String[]args){
        Scanner s= new Scanner(System.in);
        float numero;
        String palabra;
        for(int i=1; i<=5; i++){
        System.out.println("Escribe una palabra;");
        palabra=s.nextLine();
        System.out.println("Escribe un numero: ");
        numero=s.nextFloat();
        }
        }//main

      • Hola yolanda bueno lo que tendrias que hacer colocar Scanner s = new Scanner(System.in), dentro del for.

        public static void main(String[]args){

        float numero;
        String palabra;
        for(int i=1; i<=5; i++){
        Scanner s= new Scanner(System.in);
        System.out.println("Escribe una palabra;");
        palabra=s.nextLine();
        System.out.println("Escribe un numero: ");
        numero=s.nextFloat();
        }
        }//main

        Espero te sea util.

        Saludos.

  8. Muchas Gracias si me funcionó,pero si no fuera mucha molestia, me podrias explicar
    Por que se tiene que estar creando la referencia al objeto Scanner dentro del ciclo

    • No es necesario crear la referencia al objeto Scanner dentro del ciclo. Lo más correcto sería añadir un s.nextLine() debajo de s.nextFloat(), dejando el código así:

      public static void main(String[]args){
      Scanner s= new Scanner(System.in);
      float numero;
      String palabra;
      for(int i=1; i<=5; i++){
      System.out.println("Escribe una palabra;");
      palabra=s.nextLine();
      System.out.println("Escribe un numero: ");
      numero=s.nextFloat();
      palabra=s.nextLine();
      }
      }//main

      Si queremos leer una linea despues de un nextInt o de un nextFloat es necesario el uso de dos nextLine, el primero para capturar el retorno de carro dejado por nextInt o nextFloat en el buffer y el segundo para leer la linea deseada.

  9. Muchas Gracias, si funcionó, pero si no fuera mucha molestia me gustaria que me explicaras por que tiene que estar dentro del ciclo, por que se tiene que hacer la
    la referencia al objeto Scanner dentro del for?

  10. Hola alguien me puede explicar como utilizar la clase Scanner: (no se como usarla ni como ponerla. Además soy novado y es un desafio que me propuso el libro, si podeis explicarme de una manera y lenguaje facil estaria extremadamente agradecido. Estoy terminando el 2º capitulo del libro POO en java y autoaprendizaje). Gracias por vuestro tiempo. saludos

    /**
    * TicketMachine models a ticket machine that issues
    * flat-fare tickets.
    * The price of a ticket is specified via the constructor.
    * Instances will check to ensure that a user only enters
    * sensible amounts of money, and will only print a ticket
    * if enough money has been input.
    * Adapted by Clayton E. Baptista B. B.
    * @author David J. Barnes and Michael Kolling
    * @version 2006.03.30
    */
    import java.io.IOException;
    import java.util.Scanner;

    class Main
    {
    public static void main(String args[]) throws IOException
    {
    Scanner price = new Scanner(System.in);
    String texto = price.next();
    System.out.println(“Valor eligido: ” + texto);
    }
    }

    public class TicketMachine
    {
    // The price of a ticket from this machine.
    private int price;
    // The price1 of a ticket from this machine.
    private int price1;
    // The price2 of a ticket from this machine.
    private int price2;
    // The amount of money entered by a customer so far.
    private int balance;
    // The total amount of money collected by this machine.
    private int total;
    // Discount for each ticket purchased.
    private int discount;
    // Savings for each ticket purchased.
    private int saving;
    // Savings (1) for each ticket purchased.
    private int saving1;
    // Savings (2) for each ticket purchased.
    private int saving2;
    // Calculate the average of the variable discount.
    private int average;
    // Calculate the average1 of the variable discount.
    private int average1;
    // Calculate the average2 of the variable discount.
    private int average2;
    // Presupuesto entre dos valores de dos variables.
    private int budget;

    /**
    * Create a machine that issues tickets of the given price.
    */
    public TicketMachine(int TicketCost, int TicketCost1, int TicketCost2)
    {
    price = TicketCost;
    price1 = TicketCost1;
    price2 = TicketCost2;
    balance = 0;
    total = 0;
    discount = 18;
    saving = price * discount;
    saving1 = price1 * discount;
    saving2 = price2 * discount;
    average = saving / 100;
    average1 = saving1 / 100;
    average2 = saving2 / 100;
    budget = 100;
    }

    /**
    * Create a machine that delivers fixed-price tickets
    */
    public TicketMachine()
    {
    price = 50;
    balance = 0;
    total = 0;
    discount = 18;
    saving = price * discount;
    average = saving / 100;
    budget = 100;
    }

    /**
    * @Return The price of a ticket.
    */
    public int getPrice()
    {
    return price;
    }

    /**
    * @Return The price1 of a ticket.
    */
    public int getPrice1()
    {
    return price1;
    }

    /**
    * @Return The price2 of a ticket.
    */
    public int getPrice2()
    {
    return price2;
    }

    /**
    * Show budget after verification of accuracy.
    */
    public void getBudget()
    {
    if(price > budget) {
    System.out.println(“Expensive” + price + ” €uros”);
    }
    else {
    System.out.println(“The price is right” + price + ” €uros”);
    }
    }

    /**
    * Return The amount of money already inserted for the
    * next ticket.
    */
    public int getBalance()
    {
    return balance;
    }

    /**
    * Get total of the ticket
    */
    public int getTotal()
    {
    return total;
    }

    /**
    * Show ticket price.
    */
    public void getTicketCost()
    {
    System.out.println(“Ticket price is ” + price + ” €uros”);
    }

    /**
    * Change the ticket price. Method setPrice
    */
    public void setPrice(int newPrice, int newPrice1, int newPrice2)
    {
    price = newPrice;
    price = newPrice1;
    price = newPrice2;
    }

    /**
    * Receive an amount of money in cents from a customer.
    * Check that the amount is sensible.
    */
    public void insertMoney(int amount)
    {
    if(amount 0) {
    balance = balance + amount;
    }
    else {
    System.out.println(“Use a positive amount. Your amount is ” + balance + ” €uros”);
    }
    }

    /**
    * Scanner class for by to use keyboard at modification value.
    */

    /**
    * Print a ticket if enough money has been inserted, and
    * reduce the current balance by the ticket price. Print
    * an error message if more money is required.
    */
    public void printTicket()
    {
    int remainingAmountToPay = balance – price;
    int remainingAmountToPay1 = balance – price1;
    int remainingAmountToPay2 = balance – price2;
    if(remainingAmountToPay >= price) {
    // Simulate the printing of a ticket.
    System.out.println(“############################”);
    System.out.println(“####Renfe Line 12 ####”);
    System.out.println(“####One-way ticket ####”);
    System.out.println(“####” + price + ” €uros” + ” ####”);
    System.out.println(“####Discount -” + average + ” €uros” + ” ####”);
    System.out.println(“############################”);
    System.out.println(“############################”);
    System.out.println(“####Your saving +” + average + ” €uros” + “###”);
    System.out.println(“############################”);
    System.out.println(“####Balance ” + (balance + average – price) + ” €uros” + ” ####”);
    System.out.println(“############################”);
    System.out.println(“# The price is right ” + budget + ” € #”);
    System.out.println();

    // Update the total collected with the price.
    total = total + balance;
    // Reduce the balance by the price.
    balance = balance + average – price;
    }
    if(remainingAmountToPay1 >= price1) {
    // Simulate the printing of a ticket.
    System.out.println(“############################”);
    System.out.println(“####Renfe Line 12 ####”);
    System.out.println(“####ten-trip ticket ####”);
    System.out.println(“####” + price1 + ” €uros” + ” ####”);
    System.out.println(“####Discount -” + average1 + ” €uros” + ” ####”);
    System.out.println(“############################”);
    System.out.println(“############################”);
    System.out.println(“####Your saving +” + average1 + ” €uros” + “###”);
    System.out.println(“############################”);
    System.out.println(“####Balance ” + (balance + average1 – price1) + ” €uros” + ” ####”);
    System.out.println(“############################”);
    System.out.println(“# The price is right ” + budget + ” € #”);
    System.out.println();

    // Update the total collected with the price.
    total = total + balance;
    // Reduce the balance by the price.
    balance = balance + average1 – price1;
    }
    if(remainingAmountToPay2 >= price2) {
    // Simulate the printing of a ticket.
    System.out.println(“############################”);
    System.out.println(“####Renfe Line 12 ####”);
    System.out.println(“####Travel monthly ####”);
    System.out.println(“####” + price2 + ” €uros” + ” ####”);
    System.out.println(“####Discount -” + average2 + ” €uros” + ” ####”);
    System.out.println(“############################”);
    System.out.println(“############################”);
    System.out.println(“####Your saving +” + average2 + ” €uros” + “###”);
    System.out.println(“############################”);
    System.out.println(“####Balance ” + (balance + average2 – price2) + ” €uros” + ” ####”);
    System.out.println(“############################”);
    System.out.println(“# The price is right ” + budget + ” € #”);
    System.out.println();

    // Update the total collected with the price.
    total = total + balance;
    // Reduce the balance by the price.
    balance = balance + average2 – price2;
    }
    else {
    System.out.println(“Please insert the correct amount ” + (price – balance) + ” €uros”);
    System.out.println(“Please insert the correct amount ” + (price1 – balance) + ” €uros”);
    System.out.println(“Please insert the correct amount ” + (price2 – balance) + ” €uros”);
    }
    }

    /**
    * Return the money in the balance.
    * The balance is cleared.
    */
    public int refundBalance()
    {
    int amountToRefund;
    amountToRefund = balance;
    balance = 0;
    return amountToRefund;

    }

    /**
    * Simular quitar vaciar todo el dinero de la MaquinaDeBoleto
    */
    public int refundTotal()
    {
    int emptyMachine;
    emptyMachine = total;
    total = 0;
    return emptyMachine;
    }
    }

  11. Por cada cadena de dato que vaya a ingresar tengo que poner
    Scanner lector = new Scanner (System.in);
    y un… String texto = lector.next();
    Oh solo pong una vez Scanner lector = new Scanner (System.in); y las demas veces el String texto = lector.next(); ?

    Saludos

    • te explico para que te aclares un poco..
      Scanner lector = new Scanner (System.in);//con esa llamada crear el objeto llamado lector, de la clase Scanner, con lo que mientras no le “borres”, lo vas a tener y no hace falta declararlo de nuevo.
      String texto = lector.next(); //con esto, crear un objeto texto, de la clase String, a la cual llamas al objeto lector y a su metodo next(), el cual te devuelve una cadena

      Espero que así te quede más claro porqué haces lo que haces, valga la redundancia.
      Un saludo

  12. Hola, tengo una duda, ¿como puedo hacer que la clase scanner me busque un dato que yo ingrese por medio de un TextField? para que luego me lo imprima en un TextArea?

  13. Tenía un problema parecido al de Yolanda en un programa Java con la clase Scanner con una entrada de la clase en un bucle for con un bloque try-catch-finally dentro. Funcionaba bien si no entraba en el catch, pero en este caso al volver a pedir el dato erróneo, el programa entraba en un bucle infinito con el valor de la entrada a null. La solución que distéis a Yolanda me ha funcionado bien.
    Gracias

  14. hola necesito ayuda pliz?????…..como puedo hacer que la clase scanner me busque un dato que yo ingrese por medio de un TextField? para que luego me lo imprima en un TextArea? pero en distintas clases

    urgente pliz

  15. hola me gustaria saber como aplico la clase scanner en una clase junto con la sentencia sql , en este caso se insertar un valor en una tabla de la base de datos pero no sé como eliminar (delete) uno de ellos mediante la clase scanner.yo pongo esto y me da error en la sentencia sql del final donde elimino, agradeceria me dijeran donde esta el error.gracias
    import java.util.ArrayList;

    import java.util.Scanner;

    public class Principal {

    public static void main(String[] args) {

    String sql;

    BaseDatos a =new BaseDatos();

    Scanner b = new Scanner(System.in);

    String c;

    int menu, opc, clave;

    while (true)

    {

    System.out.println(“Ingrese el numero de operación a realizar (1-6):”);

    System.out.println(“Ingrese la opción deseada: “);

    System.out.println(“1 – ALTA”);

    System.out.println(“2 – BAJA”);

    System.out.println(“3 – MOFIFICACION”);

    System.out.println(“4 – CONSULTA DE DATOS”);

    System.out.println(“5 – ELIMINAR”);

    System.out.println(“6 – SALIR”);

    menu = Integer.parseInt(b.nextLine());

    switch (menu)

    {

    case 1:{

    //Agregar

    System.out.print(“Ingrese el dato que desea AGREGAR: “);

    c = b.nextLine();

    System.out.println(c);

    sql = “insert into proyecto1 values (0,'” + c + “‘)”;

    System.out.println(sql);

    a.transacSql(sql);

    }break;

    case 2:{

    //Baja

    System.out.println(“Ingrese el dato que desea dar baja”);

    c=b.nextLine();

    System.out.println(c);

    sql=”delete from proyecto1 where nombre = (0,'” + c + ” ‘)”;

    System.out.println(sql);

    a.transacSql(sql);

    }break;

    }

    }

    }

    }

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s