在Java中是否有与C的scanf等效的方法?

Java具有格式字符串的概念,与其他语言中的字符串格式非常相似。 它在诸如String#format()类的JDK方法中用于输出转换。

我想知道在Java中是否有类似于C的scanf的输入转换方法?

看一下这个站点 ,它解释了两种使用Scanner或System.in中的经典InputStreamReader从java中的控制台读取的方法。

以下代码摘自引用网站:

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

问候。

标准Java中没有纯scanf替换,但您可以使用java.util.Scanner来解决使用scanf解决的相同问题。

Java总是将参数作为字符串类型…( String args [] ),因此您需要转换所需的类型。

  • 使用Integer.parseInt()将您的字符串转换为Interger。
  • 要打印任何字符串,您可以使用System.out.println()

示例:

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

对于标准输入,您可以使用像

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

如果一个人真的想要他们可以制作自己的scanf()版本,如下所示:

  import java.util.ArrayList; import java.util.Scanner; public class Testies { public static void main(String[] args) { ArrayList nums = new ArrayList(); ArrayList strings = new ArrayList(); // 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, ArrayList 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 strings, ArrayList 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()); } } } } 

显然我的方法只检查字符串和整数,如果你想要处理不同的数据类型,添加适当的arraylists并检查它们。 此外, hasNext()应该位于if-else if序列的底部,因为hasNext()将为字符串中的所有数据返回true。

输出:

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

可能不是最好的例子; 但是,重点是Scanner实现了Iterator类。 使用hasNext()方法可以轻松迭代扫描仪输入; 然后存储输入。

有一个更简单的答案

 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格式化输出,如下面的代码片段所述。

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

你可以在这里阅读更多。