2013-06-07 15 views
21

Java ma pojęcie format strings, z silnym podobieństwem do format strings in other languages. Jest używany w metodach JDK, takich jak String#format() do konwersji danych wyjściowych.Czy istnieje odpowiednik metody skanowania C w języku Java?

Zastanawiam się, czy istnieje metoda konwersji wejścia podobna do C's scanf w Javie?

+0

juse za sobą [link] http://stackoverflow.com/questions/2506077/how-to-read-integer-value-from-the- standard-input-in-java – beyrem

+6

Dlaczego Downvotes ...? Myślę, że jest po prostu początkującym użytkownikiem języka Java. Czego możemy się spodziewać od początkującego, On po prostu chce znaleźć jakiś związek między C a Javą –

+1

Java ma 'String.format (format, args)' (co jest całkiem podobne do printf). Zrozumiałe jest, że ktoś chce wiedzieć czy jest odpowiednik 'scanf'. Nie wiem, dlaczego to pytanie jest przegłosowane. – 4gus71n

Odpowiedz

17

Spójrz na this site, wyjaśnia dwie metody czytania z konsoli w java, używając Scanner lub klasycznego InputStreamReader z System.in.

następujący kod pochodzi z cytowanej strony:

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

Pozdrawiam.

+8

Czy możesz powiedzieć odpowiednik scanf ("% d% d% s% f", a, b, c, d) w JAVA! Myślę, że to dość skomplikowane. Dobrze? – Gopichand

+0

@Gopichand Nie ma dokładnego dopasowania w java, ale spójrz na dokument "Skaner", możesz odczytać określony typ danych ze standardowego wejścia. Na przykład: 'int i = scanIn.nextInt();' do odczytu int. – wizard

+3

@Gopich i Niestety nie ma dokładnej metody takiej jak scanf w Javie. Lepszym rozwiązaniem, które można zrobić, jest podzielenie łańcucha znaków, a następnie pobranie żetonów i ich rzucenie. Jeśli ktoś się ze mną różni, pokaż mi przykład 'scanf ("% d% d% s% f ", a, b, c, d)', jeden ekwiwalent liniowy w java! – 4gus71n

12

Nie ma czystego zamiennika scanf w standardowej Javie, ale można użyć java.util.Scanner dla tych samych problemów, które można rozwiązać za pomocą scanf.

+0

+1 @Aleksander Blomskøld. – NINCOMPOOP

+0

Co masz na myśli Pan Despicable? –

+0

@Despicable O czym ty mówisz? Czy mówisz, że sugerujesz, aby ludzie czekali, aby ci, którzy mają mniej punktów, najpierw odpowiedzieli na pytania, aby zdobyć więcej punktów? Z każdej odpowiedzi nie dostajesz zbyt wiele punktów. To najlepsze/najbardziej popularne odpowiedzi, które zdobywają najwięcej punktów, a otrzymają punkty, nawet jeśli otrzymają odpowiedź z opóźnieniem. BTW rep 159 901 –

0

Java zawsze przyjmuje argumenty jako typ łańcucha ... (String args []), więc musisz dokonać konwersji w wybranym typie.

  • Użyj Integer.parseInt(), aby przekształcić swój ciąg w Interger.
  • Aby wydrukować dowolny ciąg znaków można użyć System.out.println()

Przykład:

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

i Standardowe wejście można użyć kodów jak

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

'StdIn' nie jest klasą w języku Java. Uważam, że jest to klasa, którą ludzie z Princeton napisali [link] (http://introcs.cs.princeton.edu/java/stdlib/StdIn.java). Jednak zadziałałoby to, gdybyś miał tę klasę w swoim projekcie. Jeśli spojrzysz na kod 'StdIn', użyjesz' Scanner' do odczytania wszystkich danych wejściowych. –

-5

można sformatować wyjście w Javie, jak opisano w poniższym fragmencie kodu.

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" 
    } 
} 

Możesz przeczytać więcej here.

0

Jeśli ktoś naprawdę chciał mogliby zrobić tam własną wersję scanf() tak:

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


} 

Oczywiście moje metody tylko sprawdzić, łańcuchów i liczb całkowitych, jeśli chcesz, aby różne typy danych były przetwarzane, dodaj odpowiednie listy i sprawdź je. Ponadto, hasNext() powinien prawdopodobnie znajdować się na dole sekwencji if-else if, ponieważ od hasNext() zwróci wartość true dla wszystkich danych w łańcuchu.

wyjściowa:

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

nie

Prawdopodobnie najlepszym przykładem; ale chodzi o to, że Scanner implementuje klasę Iterator.Ułatwianie iteracji poprzez wejście skanerów za pomocą metod hasNext<datatypehere>(); a następnie przechowywanie danych wejściowych.

0

Jest jeszcze prostsza odpowiedź

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

To nie jest prostsze niż zaakceptowana odpowiedź, to jest to samo. – BitByteDog

+0

To o wiele mniej kodu, dzięki czemu jest prostsze. Wszystkie nieistotne części z zaakceptowanej odpowiedzi zostały wyczyszczone –

Powiązane problemy