2013-06-07 3 views
21

Java имеет понятие format strings, с сильным сходством с format strings in other languages. Он используется в методах JDK, таких как String#format() для преобразования вывода.Есть ли эквивалентный метод для сканирования C в Java?

Мне было интересно, есть ли метод преобразования ввода, сродни C's scanf в Java?

+0

JUSE позади вас [ссылка] http://stackoverflow.com/questions/2506077/how-to-read-integer-value-from-the- standard-input-in-java – beyrem

+6

Почему Downvotes ...? Я думаю, что он всего лишь новичок в джаве. Что мы можем ожидать от новичка, он просто хочет найти какую-то связь между C и Java. –

+1

Java имеет 'String.format (format, args)' (что это довольно похоже на printf). Понятно, что кто-то хочет знать, есть ли эквивалент 'scanf'. Я не знаю, почему этот вопрос был проголосован. – 4gus71n

ответ

17

Посмотрите на this site, он объясняет два метода чтения с консоли в 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); 
    } 
} 

С уважением.

+8

Можете ли вы рассказать эквивалент scanf ("% d% d% s% f", a, b, c, d) в JAVA! Я думаю, что это довольно сложно. – Gopichand

+0

@Gopichand В java нет точного соответствия, но посмотрите на документ «Scanner», вы можете читать данные определенного типа из stdin. Например: 'int i = scanIn.nextInt();' для чтения int. – wizard

+3

@Gopichand К сожалению, нет точного метода, например scanf в java. Лучший подход, который вы могли бы сделать, это разделить String, а затем взять маркеры и бросить их. Если кто-то отличается от меня, тогда покажите мне пример 'scanf («% d% d% s% f », a, b, c, d)', один эквивалент liner в java! – 4gus71n

12

В стандартной Java нет чистой замены scanf, но вы можете использовать java.util.Scanner для тех же проблем, которые вы использовали бы scanf для решения.

+0

+1 @Aleksander Blomskøld. – NINCOMPOOP

+0

Что значит мистер Презренный? –

+0

@ Despicable Что вы говорите? Вы говорите, предлагая людям ждать, чтобы те, у кого меньше очков, ответили на вопросы, чтобы получить больше очков? Вы не получаете много очков от каждого ответа. Это лучшие/самые популярные ответы, которые получают наибольшее количество баллов, и они получат очки, даже если они будут опозданы. BTW rep 158,901 –

0

Java всегда принимает аргументы как строковый тип ... (String args []), поэтому вам нужно преобразовать его в нужный тип.

  • Используйте Integer.parseInt(), чтобы преобразовать вашу строку в Interger.
  • Чтобы напечатать строку, которую можно использовать System.out.println()

Пример:

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

и Standard Input вы можете использовать коды, как

StdIn.readInt(); 
    StdIn.readString(); 
+0

'StdIn' не является классом в java. Я считаю, что это класс, который люди в Принстоне писали [link] (http://introcs.cs.princeton.edu/java/stdlib/StdIn.java). Однако это сработает, если бы у вас был этот класс в вашем проекте. Если вы посмотрите на код для 'StdIn', они просто используют« Scanner »для чтения всего ввода. –

-5

Вы можете форматировать ваш вывода в 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" 
    } 
} 

Вы можете прочитать больше here.

0

Если один действительно хотел они могли бы сделать там собственную версию 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>(); и затем сохранить вход.

0

есть еще более простой ответ

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

    } 
} 
+1

Это не проще, чем принятый ответ, это то же самое. – BitByteDog

+0

Это намного меньше кода, что делает его проще. Все несущественные части из принятого ответа были очищены –