Есть ли эквивалентный метод для C scanf в Java?
Java имеет понятие форматирования строк, с сильным сходством с форматированием строк на других языках. Он используется в методах JDK, таких как String#format()
для преобразования вывода.
Мне было интересно, есть ли метод преобразования ввода, похожий на C scanf
в Java?
Ответы
Ответ 1
Взгляните на этот сайт, он объясняет два метода чтения с консоли в java, используя Scanner
или классический InputStreamReader
из System.in.
Следующий код взят с цитируемого веб-сайта:
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);
}
}
С уважением.
Ответ 2
В стандартной Java нет чистой замены scanf, но вы можете использовать java.util.Scanner для тех же проблем, которые вы бы использовали scanf для решения.
Ответ 3
Java всегда принимает аргументы как строковый тип... (String args []), поэтому вам нужно преобразовать в нужный тип.
- Используйте
Integer.parseInt()
для преобразования вашей строки в Interger.
- Чтобы напечатать любую строку, вы можете использовать
System.out.println()
Пример:
int a;
a = Integer.parseInt(args[0]);
и для Стандартный ввод вы можете использовать такие коды, как
StdIn.readInt();
StdIn.readString();
Ответ 4
Если бы кто-то действительно хотел, чтобы они могли сделать собственную версию 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>()
; и затем сохраните вход.
Ответ 5
Еще более простой ответ
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 );
}
}
Ответ 6
Вы можете форматировать свой вывод на 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"
}
}
Здесь вы можете прочитать .