Подтвердить что ты не робот

Есть ли эквивалентный метод для C scanf в Java?

Java имеет понятие форматирования строк, с сильным сходством с форматированием строк на других языках. Он используется в методах JDK, таких как String#format() для преобразования вывода.

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

4b9b3361

Ответ 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"
   }
}

Здесь вы можете прочитать .