2013-06-07 11 views
21

जावा format strings की धारणा है, जिसमें format strings in other languages पर एक मजबूत समानता है। इसका उत्पादन आउटपुट रूपांतरण के लिए String#format() जैसे जेडीके विधियों में किया जाता है।क्या जावा में सी के स्कैनफ के बराबर तरीका है?

मैं सोच रहा था कि जावा में C's scanf के समान इनपुट रूपांतरण विधि है या नहीं?

+0

Juse के पीछे आप [एक लिंक] http://stackoverflow.com/questions/2506077/how-to-read-integer-value-from-the- मानक-इनपुट-इन-जावा – beyrem

+6

क्यों डाउनवोट्स ...? मुझे लगता है कि वह जावा में सिर्फ एक नौसिखिया है। हम एक नौसिखिया से क्या उम्मीद कर सकते हैं, वह सिर्फ सी और जावा –

+1

के बीच कुछ संबंध ढूंढना चाहता है जावा में 'स्ट्रिंग.फॉर्मैट (प्रारूप, तर्क)' है (यह प्रिंटफ के लिए बहुत समान है) यह समझ में आता है कि कोई जानना चाहता है कि क्या है एक 'स्कैनफ' समकक्ष। मुझे नहीं पता कि यह प्रश्न क्यों मतदान किया गया है। – 4gus71n

उत्तर

17

this site पर एक नज़र डालें, यह Scanner या शास्त्रीय InputStreamReader सिस्टम.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

क्या आप कृपया जावा में स्कैनफ ("% d% d% s% f", ए, बी, सी, डी) के बराबर बता सकते हैं! मुझे लगता है कि यह काफी जटिल है.ठीक है? – Gopichand

+0

@ गोपीचंद जावा में सटीक मिलान नहीं है, लेकिन 'स्कैनर' दस्तावेज़ पर एक नज़र डालें, आप stdin से विशिष्ट प्रकार के डेटा को पढ़ सकते हैं। उदाहरण के लिए: 'int i = scanIn.nextInt();' int पढ़ने के लिए। – wizard

+3

@ गोपीचंद दुख की बात है कि जावा में स्कैनफ जैसी कोई सटीक विधि नहीं है। बेहतर दृष्टिकोण जो आप कर सकते हैं वह स्ट्रिंग को विभाजित करता है और फिर टोकन लेता है और उन्हें कास्ट करता है। अगर कोई मेरे साथ अलग है, तो मुझे 'स्कैनफ ("% d% d% s% f", ए, बी, सी, डी) का एक उदाहरण दिखाएं,' जावा में समकक्ष एक लाइनर! – 4gus71n

12

मानक जावा में एक शुद्ध स्कैनफ़ प्रतिस्थापन नहीं है, लेकिन आप उसी समस्या के लिए java.util.Scanner का उपयोग कर सकते हैं, जिसे आप हल करने के लिए स्कैनफ़ का उपयोग करेंगे।

+0

+1 @ एलेक्सेंडर ब्लोमस्कल्ड। – NINCOMPOOP

+0

श्रीमान डैस्पिकेबल का क्या मतलब है? –

+0

@ डिस्पिकेबल आप किस बारे में बात कर रहे हैं? क्या आप कह रहे हैं कि लोग कम अंक वाले लोगों को अधिक अंक प्राप्त करने के लिए पहले सवालों के जवाब देने का इंतजार कर रहे हैं? आपको प्रत्येक उत्तर से ज्यादा अंक नहीं मिलते हैं। यह सबसे अच्छा/सबसे लोकप्रिय उत्तर है जो सबसे अधिक अंक प्राप्त करता है और देर से उत्तर देने पर भी अंक प्राप्त होंगे। बीटीडब्ल्यू प्रतिनिधि 158,901 –

0

जावा हमेशा स्ट्रिंग प्रकार के रूप में तर्क लेता है ... (स्ट्रिंग तर्क []) इसलिए आपको अपने वांछित प्रकार में रूपांतरित करने की आवश्यकता है।

  • अपनी स्ट्रिंग को इंटरगर में बदलने के लिए Integer.parseInt() का उपयोग करें।
  • किसी भी स्ट्रिंग का उपयोग कर सकते मुद्रित करने के लिए System.out.println()

उदाहरण:

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

और आप स्वरूपित कर सकते हैं स्टैंडर्ड इनपुट आप की तरह

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

'StdIn' जावा में एक वर्ग नहीं है। मेरा मानना ​​है कि यह एक वर्ग है कि प्रिंसटन के लोगों ने [लिंक] लिखा है (http://introcs.cs.princeton.edu/java/stdlib/StdIn.java)। हालांकि, अगर आपके पास उस परियोजना में आपकी कक्षा थी तो यह काम करेगा। यदि आप 'StdIn' के लिए कोड देखते हैं तो वे सभी इनपुट पढ़ने के लिए केवल 'स्कैनर' का उपयोग करते हैं। –

-5

कोड का उपयोग कर सकते हैं के लिए अपने नीचे कोड स्निपेट में वर्णित जावा में आउटपुट।

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() स्ट्रिंग में मौजूद सभी डेटा के लिए सत्य वापस आ जाएगा।

आउटपुट:

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

शायद नहीं सबसे अच्छा उदाहरण; लेकिन, बिंदु यह है कि ScannerIterator कक्षा लागू करता है।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

यह कम कोड है, जो इसे आसान बनाता है। स्वीकृत उत्तर के सभी महत्वपूर्ण हिस्सों को साफ कर दिया गया था –

संबंधित मुद्दे