खोज…


कंसोल से उपयोगकर्ता इनपुट पढ़ना

BufferedReader का उपयोग करना:

System.out.println("Please type your name and press Enter.");

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
try {
    String name = reader.readLine();
    System.out.println("Hello, " + name + "!");
} catch(IOException e) {
    System.out.println("An error occurred: " + e.getMessage());
}

इस कोड के लिए निम्न आयात आवश्यक हैं:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

Scanner का उपयोग करना:

जावा एसई 5
System.out.println("Please type your name and press Enter");

Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();

System.out.println("Hello, " + name + "!");

इस उदाहरण के लिए निम्न आयात की आवश्यकता है:

import java.util.Scanner;

एक से अधिक लाइन पढ़ने के लिए, scanner.nextLine() बार-बार:

System.out.println("Please enter your first and your last name, on separate lines.");
    
Scanner scanner = new Scanner(System.in);
String firstName = scanner.nextLine();
String lastName = scanner.nextLine();
    
System.out.println("Hello, " + firstName + " " + lastName + "!");

Strings प्राप्त करने के लिए दो तरीके हैं, next() और nextLine()next() पहली जगह तक पाठ लौटाता है (जिसे "टोकन" के रूप में भी जाना जाता है), और nextLine() उपयोगकर्ता को दर्ज किए जाने तक सभी पाठ लौटाता है।

Scanner String अलावा अन्य डेटा प्रकारों को पढ़ने के लिए उपयोगिता विधियाँ भी प्रदान करता है। इसमें शामिल है:

scanner.nextByte();
scanner.nextShort();
scanner.nextInt();
scanner.nextLong();
scanner.nextFloat();
scanner.nextDouble();
scanner.nextBigInteger();
scanner.nextBigDecimal();

इनमें से किसी भी विधि has (जैसे कि hasNextLine() , hasNextInt() ) के रूप में hasNextLine() true यदि स्ट्रीम में किसी भी प्रकार का अनुरोध अधिक है। नोट: ये विधियाँ प्रोग्राम को क्रैश कर देंगी यदि इनपुट अनुरोधित प्रकार का नहीं है (उदाहरण के लिए, "a" nextInt() )। इसे रोकने के लिए आप try {} catch() {} का उपयोग कर सकते हैं (देखें: अपवाद )

Scanner scanner = new Scanner(System.in); //Create the scanner
scanner.useLocale(Locale.US); //Set number format excepted
System.out.println("Please input a float, decimal separator is .");
if (scanner.hasNextFloat()){ //Check if it is a float
    float fValue = scanner.nextFloat(); //retrive the value directly as float
    System.out.println(fValue + " is a float");
}else{
    String sValue = scanner.next(); //We can not retrive as float
    System.out.println(sValue + " is not a float");
}

System.console का उपयोग करना:

जावा एसई 6
String name = System.console().readLine("Please type your name and press Enter%n");

System.out.printf("Hello, %s!", name);

//To read passwords (without echoing as in unix terminal)
char[] password = System.console().readPassword();

लाभ :

  • पढ़ने के तरीके सिंक्रनाइज़ हैं
  • प्रारूप स्ट्रिंग सिंटैक्स का उपयोग किया जा सकता है

नोट : यह तभी काम करेगा जब मानक इनपुट और आउटपुट स्ट्रीम को रीडायरेक्ट किए बिना प्रोग्राम को वास्तविक कमांड लाइन से चलाया जाए। यह काम नहीं करता है जब कार्यक्रम कुछ आईडीई के भीतर से चलाया जाता है, जैसे कि ग्रहण। आईडीई के भीतर और स्ट्रीम पुनर्निर्देशन के साथ काम करने वाले कोड के लिए, अन्य उदाहरण देखें।

बेसिक कमांड-लाइन व्यवहार को लागू करना

मूल प्रोटोटाइप या मूल कमांड-लाइन व्यवहार के लिए, निम्न लूप काम में आता है।

public class ExampleCli {

    private static final String CLI_LINE   = "example-cli>"; //console like string

    private static final String CMD_QUIT   = "quit";    //string for exiting the program
    private static final String CMD_HELLO  = "hello";    //string for printing "Hello World!" on the screen
    private static final String CMD_ANSWER = "answer";    //string for printing 42 on the screen

    public static void main(String[] args) {
        ExampleCli claimCli = new ExampleCli();    // creates an object of this class

        try {
            claimCli.start();    //calls the start function to do the work like console
        }
        catch (IOException e) {
            e.printStackTrace();    //prints the exception log if it is failed to do get the user input or something like that
        }
    }

    private void start() throws IOException {
        String cmd = "";
        
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        while (!cmd.equals(CMD_QUIT)) {    // terminates console if user input is "quit"
            System.out.print(CLI_LINE);    //prints the console-like string 

            cmd = reader.readLine();    //takes input from user. user input should be started with "hello",  "answer" or "quit"
            String[] cmdArr = cmd.split(" ");

            if (cmdArr[0].equals(CMD_HELLO)) {    //executes when user input starts with "hello"
                hello(cmdArr);
            }
            else if (cmdArr[0].equals(CMD_ANSWER)) {    //executes when user input starts with "answer"
                answer(cmdArr);
            }
        }
    }
    
    // prints "Hello World!" on the screen if user input starts with "hello"
    private void hello(String[] cmdArr) {
        System.out.println("Hello World!");
    }
    
    // prints "42" on the screen if user input starts with "answer"
    private void answer(String[] cmdArr) {
        System.out.println("42");
    }
}

कंसोल में स्ट्रिंग्स को संरेखित करना

विधि PrintWriter.format ( System.out.format माध्यम से कहा जाता है) का उपयोग कंसोल में संरेखित स्ट्रिंग्स को प्रिंट करने के लिए किया जा सकता है। यह पद्धति प्रारूप सूचना और String के लिए वस्तुओं की एक श्रृंखला के साथ एक String प्राप्त करती है:

String rowsStrings[] = new String[] {"1", 
                                     "1234", 
                                     "1234567", 
                                     "123456789"};

String column1Format = "%-3s";    // min 3 characters, left aligned
String column2Format = "%-5.8s";  // min 5 and max 8 characters, left aligned
String column3Format = "%6.6s";   // fixed size 6 characters, right aligned
String formatInfo = column1Format + " " + column2Format + " " + column3Format;

for(int i = 0; i < rowsStrings.length; i++) {
    System.out.format(formatInfo, rowsStrings[i], rowsStrings[i], rowsStrings[i]);
    System.out.println();
}

आउटपुट:

1   1          1
1234 1234    1234
1234567 1234567 123456
123456789 12345678 123456

निश्चित आकार के कॉलम के साथ प्रारूप के तारों का उपयोग करके निश्चित आकार के स्तंभों के साथ तालिका जैसी उपस्थिति में तारों को मुद्रित करने की अनुमति मिलती है:

String rowsStrings[] = new String[] {"1", 
                                     "1234", 
                                     "1234567", 
                                     "123456789"};

String column1Format = "%-3.3s";  // fixed size 3 characters, left aligned
String column2Format = "%-8.8s";  // fixed size 8 characters, left aligned
String column3Format = "%6.6s";   // fixed size 6 characters, right aligned
String formatInfo = column1Format + " " + column2Format + " " + column3Format;

for(int i = 0; i < rowsStrings.length; i++) {
    System.out.format(formatInfo, rowsStrings[i], rowsStrings[i], rowsStrings[i]);
    System.out.println();
}

आउटपुट:

1   1             1
123 1234       1234
123 1234567  123456
123 12345678 123456

प्रारूप स्ट्रिंग उदाहरण

  • %s : बिना किसी स्वरूपण के बस एक स्ट्रिंग
  • %5s : स्ट्रिंग को न्यूनतम 5 वर्णों के साथ प्रारूपित करें; यदि स्ट्रिंग कम है यह 5 अक्षर और सही गठबंधन करने के लिए गद्देदार हो जाएगा
  • %-5s : स्ट्रिंग को न्यूनतम 5 वर्णों के साथ प्रारूपित करें; यदि स्ट्रिंग कम है यह 5 अक्षर के लिए गद्देदार किया जाएगा और गठबंधन छोड़ दिया
  • %5.10s : स्ट्रिंग को न्यूनतम 5 वर्णों और अधिकतम 10 वर्णों के साथ प्रारूपित करें; यदि स्ट्रिंग 5 से भी कम है यह 5 अक्षर और सही गठबंधन करने के लिए गद्देदार हो जाएगा; यदि स्ट्रिंग 10 से अधिक लंबी है यह 10 अक्षर और सही गठबंधन को छोटा कर दिया जाएगा
  • %-5.5s : 5 वर्णों के निश्चित आकार के साथ स्ट्रिंग को प्रारूपित करें (न्यूनतम और अधिकतम समान हैं); यदि स्ट्रिंग 5 यह 5 अक्षर के लिए गद्देदार किया जाएगा और गठबंधन छोड़ दिया की तुलना में कम है, यदि स्ट्रिंग 5 से अधिक लंबी है यह 5 अक्षर को छोटा कर दिया जाएगा और गठबंधन छोड़ दिया


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow