在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" } }
你可以在这里阅读更多。