Java 有格式化字符串的概念,与其他语言的格式化字符串非常相似。它用于 JDK 方法中,例如String#format()
用于输出转换。
我想知道是否有类似于Java中C 的输入转换方法?scanf
Java 有格式化字符串的概念,与其他语言的格式化字符串非常相似。它用于 JDK 方法中,例如String#format()
用于输出转换。
我想知道是否有类似于Java中C 的输入转换方法?scanf
看看这个网站,它解释了两种从 java 中的控制台读取的方法,使用System.in中Scanner
的或经典的。InputStreamReader
以下代码取自引用的网站:
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 解决的相同问题。
不是等效的,但您可以使用 Scanner 和模式来解析由空格分隔的三个非负数的行,例如:
71 5796 2489
88 1136 5298
42 420 842
这是使用的代码findAll
:
new Scanner(System.in).findAll("(\\d+) (\\d+) (\\d+)")
.forEach(result -> {
int fst = Integer.parseInt(result.group(1));
int snd = Integer.parseInt(result.group(2));
int third = Integer.parseInt(result.group(3));
int sum = fst + snd + third;
System.out.printf("%d + %d + %d = %d", fst, snd, third, sum);
});
如果有人真的想要,他们可以制作自己的版本,scanf()
如下所示:
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());
}
}
}
}
显然,我的方法只检查字符串和整数,如果您想要处理不同的数据类型,请添加适当的数组列表并检查它们。此外,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<datatypehere>()
;然后存储输入。
C/C++ 有一个变量引用的概念,这使得创建类似的东西scanf
变得更加容易。但是,在 Java 中,一切都是按值传递的。在对象的情况下,它们的引用是按值传递的。
因此,基本上不可能有一个简洁的等价于scanf
. 但是,您可以使用java.util.Scanner
,它执行类似于 的操作scanf
。
所以这个 C/C++:
int a;
float b;
scanf("%d %f", &a, &b);
(大致)相当于这个Java:
int a;
float b;
try (Scanner sc = new Scanner(System.in)) {
a = sc.nextInt();
b = sc.nextFloat();
}
Java 总是将参数作为字符串类型......(String args[])所以你需要转换成你想要的类型。
Integer.parseInt()
将您的字符串转换为整数。System.out.println()
例子 :
int a;
a = Integer.parseInt(args[0]);
对于标准输入,您可以使用类似的代码
StdIn.readInt();
StdIn.readString();
还有一个更简单的答案
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"
}
}
你可以在这里阅读更多。