sustituye scanner funcion como java

scanner - scanf equivalent in java



¿Hay un método equivalente al scanf de C en Java? (6)

Java tiene la noción de cadenas de formato , que se parecen mucho a las cadenas de formato en otros idiomas . Se usa en métodos JDK como String#format() para la conversión de salida.

Me preguntaba si hay un método de conversión de entrada similar al scanf de C en Java?


Eche un vistazo a este sitio , explica dos métodos para leer desde la consola en java, usando Scanner o el InputStreamReader clásico de System.in.

El siguiente código está tomado del sitio web citado:

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class ReadConsoleSystem { public static void main(String[] args) { System.out.println("Enter something here : "); try{ BufferedReader bufferRead = new BufferedReader(new InputStreamReader(System.in)); String s = bufferRead.readLine(); System.out.println(s); } catch(IOException e) { e.printStackTrace(); } } }

-

import java.util.Scanner; public class ReadConsoleScanner { public static void main(String[] args) { System.out.println("Enter something here : "); String sWhatever; Scanner scanIn = new Scanner(System.in); sWhatever = scanIn.nextLine(); scanIn.close(); System.out.println(sWhatever); } }

Saludos.


Hay una respuesta aún más simple

import java.io.BufferedReader; import java.util.Scanner; public class Main { public static void main(String[] args) { String myBeautifulScanf = new Scanner(System.in).nextLine(); System.out.println( myBeautifulScanf ); } }


Java siempre toma argumentos como un tipo de cadena ... ( Argings de cadena [] ) por lo que necesita convertir el tipo deseado.

  • Use Integer.parseInt() para convertir su cadena en Interger.
  • Para imprimir cualquier cadena puede usar System.out.println()

Ejemplo:

int a; a = Integer.parseInt(args[0]);

y para entrada estándar puede usar códigos como

StdIn.readInt(); StdIn.readString();


No hay un reemplazo puro de scanf en Java estándar, pero podría usar un java.util.Scanner para los mismos problemas que usaría scanf para resolver.


Puede formatear su salida en Java como se describe a continuación en el fragmento de código.

public class TestFormat { public static void main(String[] args) { long n = 461012; System.out.format("%d%n", n); // --> "461012" System.out.format("%08d%n", n); // --> "00461012" System.out.format("%+8d%n", n); // --> " +461012" System.out.format("%,8d%n", n); // --> " 461,012" System.out.format("%+,8d%n%n", n); // --> "+461,012" } }

Puedes leer más here.


Si uno realmente quisiera, podría crear su propia versión de scanf() así:

import java.util.ArrayList; import java.util.Scanner; public class Testies { public static void main(String[] args) { ArrayList<Integer> nums = new ArrayList<Integer>(); ArrayList<String> strings = new ArrayList<String>(); // get input System.out.println("Give me input:"); scanf(strings, nums); System.out.println("Ints gathered:"); // print numbers scanned in for(Integer num : nums){ System.out.print(num + " "); } System.out.println("/nStrings gathered:"); // print strings scanned in for(String str : strings){ System.out.print(str + " "); } System.out.println("/nData:"); for(int i=0; i<strings.size(); i++){ System.out.println(nums.get(i) + " " + strings.get(i)); } } // get line from system public static void scanf(ArrayList<String> strings, ArrayList<Integer> nums){ Scanner getLine = new Scanner(System.in); Scanner input = new Scanner(getLine.nextLine()); while(input.hasNext()){ // get integers if(input.hasNextInt()){ nums.add(input.nextInt()); } // get strings else if(input.hasNext()){ strings.add(input.next()); } } } // pass it a string for input public static void scanf(String in, ArrayList<String> strings, ArrayList<Integer> nums){ Scanner input = (new Scanner(in)); while(input.hasNext()){ // get integers if(input.hasNextInt()){ nums.add(input.nextInt()); } // get strings else if(input.hasNext()){ strings.add(input.next()); } } } }

Obviamente, mis métodos solo comprueban Cadenas y enteros, si desea que se procesen diferentes tipos de datos, agregue los arrailistas apropiados y verifique si existen. Además, hasNext() probablemente debería estar al final de la secuencia if-else if ya que hasNext() devolverá verdadero para todos los datos en la cadena.

Salida:

Give me input: apples 8 9 pears oranges 5 Ints gathered: 8 9 5 Strings gathered: apples pears oranges Data: 8 apples 9 pears 5 oranges

Probablemente no sea el mejor ejemplo; pero, el punto es que Scanner implementa la clase Iterator . Facilitando la iteración a través de la entrada de los escáneres utilizando los hasNext<datatypehere>() ; y luego almacenar la entrada.