Inicio > Java, Linux, NetBeans, Programacion > Clase scanner en Java

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
Categorías:Java, Linux, NetBeans, Programacion Etiquetas: ,
  1. Ramon Francisco
    diciembre 24, 2007 en 12:03 am

    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. carlos
    marzo 24, 2008 en 9:19 pm

    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. HO
    noviembre 20, 2008 en 6:47 am

    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. nachxs
    noviembre 20, 2008 en 9:09 am

    Hola HO, prueba con nextLine() en lugar de next()

    Saludos.

  5. enero 5, 2009 en 6:25 pm

    ¡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!

  6. benito
    marzo 1, 2009 en 6:00 pm

    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

  7. abel27
    junio 22, 2009 en 8:12 pm

    hola sabe pense que su explicacion o interpretacion de esta clase no fuera tan somera.

  8. Jako
    julio 22, 2009 en 5:14 am

    OK gracias me servio de mucho tu post seria super si arias post de otras clases..

  9. Ramms
    octubre 1, 2009 en 8:54 pm

    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.

    • nachxs
      octubre 1, 2009 en 9:45 pm

      Que version del JDK usas???, porque Scanner esta implementado a partir del JDK 5.x

  10. Yolanda G.
    octubre 15, 2009 en 10:58 am

    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..

    • nachxs
      octubre 15, 2009 en 4:30 pm

      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.

      • yolanda G.
        octubre 20, 2009 en 1:09 pm

        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

      • nachxs
        octubre 22, 2009 en 9:46 am

        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.

  11. Yolanda G.
    octubre 23, 2009 en 9:18 am

    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

    • noviembre 16, 2011 en 5:29 pm

      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.

  12. Yolanda G.
    octubre 23, 2009 en 9:47 am

    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?

  13. clayton
    agosto 28, 2010 en 10:25 am

    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;
    }
    }

  14. Poshox
    octubre 11, 2010 en 8:22 pm

    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

    • dani
      octubre 18, 2010 en 6:05 am

      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

  15. machosmecos
    noviembre 17, 2010 en 9:16 pm

    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?

  16. fernando
    febrero 8, 2011 en 12:20 am

    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

  17. mayo 3, 2011 en 11:29 am

    gracias amigoo me sirvio en clase es un metedo k tambien se pueden usar en varios versiones de jdk tanto como java util java escrib

  18. andra
    junio 21, 2011 en 11:58 pm

    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

  19. septiembre 1, 2011 en 11:44 am

    Mas acerca de Java.

  20. Aramis
    noviembre 16, 2011 en 8:42 am

    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;

    }

    }

    }

    }

  1. enero 3, 2011 en 9:30 am

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

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 35 seguidores

%d personas les gusta esto: