জাভাতে স্ক্যানার ক্লাসটি ব্যবহার করে আমি কনসোল থেকে ইনপুট কীভাবে পড়তে পারি?


224

Scannerক্লাসটি ব্যবহার করে আমি কীভাবে কনসোল থেকে ইনপুট পড়তে পারি ? এটার মতো কিছু:

System.out.println("Enter your username: ");
Scanner = input(); // Or something like this, I don't know the code

মূলত, আমি যা চাই তা হল স্ক্যানারটি ব্যবহারকারীর নামটির জন্য একটি ইনপুট পড়ুন এবং কোনও Stringভেরিয়েবলকে ইনপুট বরাদ্দ করুন ।



2
গুড কোডের নমুনা: কোডফ্লেক্স.কম
জন ডেট্রয়েট

উত্তর:


341

কীভাবে java.util.Scannerকাজ করে কোনও একক পূর্ণসংখ্যা পড়তে হবে তা বোঝানোর একটি সাধারণ উদাহরণ System.in। এটা সত্যিই বেশ সহজ।

Scanner sc = new Scanner(System.in);
int i = sc.nextInt();

একটি ব্যবহারকারী নাম পুনরুদ্ধার করতে আমি সম্ভবত ব্যবহার করব sc.nextLine()

System.out.println("Enter your username: ");
Scanner scanner = new Scanner(System.in);
String username = scanner.nextLine();
System.out.println("Your username is " + username);

আপনি next(String pattern)যদি ইনপুটটির উপরে আরও নিয়ন্ত্রণ চান বা কেবল usernameভেরিয়েবলকে বৈধতা দিতে চান তবে আপনিও ব্যবহার করতে পারেন ।

আপনি তাদের বাস্তবায়নের জন্য আরও তথ্যের জন্য API ডকুমেন্টেশন পাবেন'lljava.util.Scanner


1
ধরা যাক যে আমি কেবল একবার স্ক্যানার ব্যবহার করি এবং স্ক্যানারটি বন্ধ করে আরম্ভ করে আমার কোডটি ফাঁকি দিতে চাই না - কোনও শ্রেণি তৈরি না করে ব্যবহারকারীর কাছ থেকে ইনপুট পাওয়ার কোনও উপায় আছে কি?
Nearoo

3
আপনি জেডিকে 8 তে রিসোর্স স্টেটমেন্ট দিয়ে চেষ্টা করে দেখতে পারেন; চেষ্টা করুন (স্ক্যানার স্ক্যানার = নতুন স্ক্যানার (System.in)) {}
রুন ভিকেষ্টাড


24

কনসোল থেকে ডেটা পড়া

  • BufferedReaderসিঙ্ক্রোনাইজ করা হয়েছে, সুতরাং একটি বাফার্ডআডার উপর পঠিত অপারেশনগুলি একাধিক থ্রেড থেকে নিরাপদে করা যেতে পারে। বাফার আকার নির্দিষ্ট করা যেতে পারে, বা ডিফল্ট আকার ( 8192 ) ব্যবহার করা যেতে পারে। বেশিরভাগ উদ্দেশ্যে ডিফল্ট যথেষ্ট বড়।

    রিডলাইন () « কেবল স্ট্রিম বা উত্স থেকে রেখায় ডেটা লাইন পড়ে। এটিকে যে কোনও একটি দ্বারা একটি লাইন সমাপ্তি বলে মনে করা হয়: \ n, \ r (বা) \ r \ n

  • Scannerডিলিমিটার প্যাটার্ন ব্যবহার করে এটির ইনপুট টোকনে বিভক্ত হয়, যা ডিফল্টরূপে হোয়াইটস্পেস () গুলি) এর সাথে মেলে এবং এটি দ্বারা স্বীকৃত Character.isWhitespace

    « পর্যন্ত ব্যবহারকারী ডেটা প্রবেশ করে, স্ক্যানিং অপারেশন অবরোধ করতে পারেন, ইনপুট জন্য অপেক্ষা করছে। « ব্যবহারের স্ক্যানার ( BUFFER_SIZE = 1024 ) আপনি একটি স্ট্রীম থেকে টোকেন একটি নির্দিষ্ট ধরনের বিশ্লেষণ করতে চাই। Scan একটি স্ক্যানার তবে থ্রেড নিরাপদ নয়। এটি বাহ্যিকভাবে সিঙ্ক্রোনাইজ করতে হবে।

    পরবর্তী () this এই স্ক্যানার থেকে পরবর্তী সম্পূর্ণ টোকেনটি সন্ধান করে এবং প্রদান করে। NextInt () the ইনপুটটির পরবর্তী টোকেনটি একটি int হিসাবে স্ক্যান করে।

কোড

String name = null;
int number;

java.io.BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
name = in.readLine(); // If the user has not entered anything, assume the default value.
number = Integer.parseInt(in.readLine()); // It reads only String,and we need to parse it.
System.out.println("Name " + name + "\t number " + number);

java.util.Scanner sc = new Scanner(System.in).useDelimiter("\\s");
name = sc.next();  // It will not leave until the user enters data.
number = sc.nextInt(); // We can read specific data.
System.out.println("Name " + name + "\t number " + number);

// The Console class is not working in the IDE as expected.
java.io.Console cnsl = System.console();
if (cnsl != null) {
    // Read a line from the user input. The cursor blinks after the specified input.
    name = cnsl.readLine("Name: ");
    System.out.println("Name entered: " + name);
}

স্ট্রিমের ইনপুট এবং আউটপুট

Reader Input:     Output:
Yash 777          Line1 = Yash 777
     7            Line1 = 7

Scanner Input:    Output:
Yash 777          token1 = Yash
                  token2 = 777

এটি এখন মূল ইমোর চেয়ে আরও ভাল, আধুনিক উত্তর answer
লজিকঅন অ্যাস্ট্রাকশন

আরও তথ্যের জন্য দেখুন: BufferedReader, Scannerএকটি স্থানীয় ফাইল (ওআর) নেটওয়ার্ক ফাইল থেকে ডেটা পড়তে।
যশ

14

ইনপুট.এনেক্সট ইন্ট () পদ্ধতিতে সমস্যা আছে - এটি কেবলমাত্র ইনট মানটি পড়ে।

সুতরাং ইনপুট.নেক্সটলাইন () ব্যবহার করে পরবর্তী লাইনটি পড়ার সময় আপনি "\ n" অর্থাত্ Enterকীটি পান। সুতরাং এড়াতে আপনাকে ইনপুট.নেস্টলাইন () যুক্ত করতে হবে।

এটির মতো চেষ্টা করুন:

 System.out.print("Insert a number: ");
 int number = input.nextInt();
 input.nextLine(); // This line you have to add (it consumes the \n character)
 System.out.print("Text1: ");
 String text1 = input.nextLine();
 System.out.print("Text2: ");
 String text2 = input.nextLine();

10

ব্যবহারকারীর কাছ থেকে ইনপুট পাওয়ার বিভিন্ন উপায় রয়েছে। এখানে এই প্রোগ্রামে আমরা স্ক্যানার ক্লাসটি টাস্কটি অর্জনে নেব। এই স্ক্যানার ক্লাসটি এর অধীনে আসে java.util, সুতরাং প্রোগ্রামটির প্রথম লাইনটি java.util.Scanner আমদানি করে; যা ব্যবহারকারীকে জাভাতে বিভিন্ন ধরণের মান পড়তে দেয়। আমদানি বিবৃতি লাইনটি প্রথম লাইনে জাভা প্রোগ্রাম হওয়া উচিত, এবং আমরা কোডের জন্য আরও এগিয়ে চলি।

in.nextInt(); // It just reads the numbers

in.nextLine(); // It get the String which user enters

স্ক্যানার শ্রেণিতে পদ্ধতিগুলি অ্যাক্সেস করতে "ইন" হিসাবে একটি নতুন স্ক্যানার অবজেক্ট তৈরি করুন। এখন আমরা এর একটি পদ্ধতি ব্যবহার করি, এটি "পরবর্তী"। "পরবর্তী" পদ্ধতিটি পাঠকের স্ট্রিংটি পায় যা কোনও ব্যবহারকারী কীবোর্ডে প্রবেশ করে।

এখানে আমি in.nextLine();স্ট্রিংটি ব্যবহারকারীর প্রবেশের জন্য ব্যবহার করছি ।

import java.util.Scanner;

class GetInputFromUser {
    public static void main(String args[]) {
        int a;
        float b;
        String s;

        Scanner in = new Scanner(System.in);
        System.out.println("Enter a string");
        s = in.nextLine();
        System.out.println("You entered string " + s);

        System.out.println("Enter an integer");
        a = in.nextInt();
        System.out.println("You entered integer " + a);

        System.out.println("Enter a float");
        b = in.nextFloat();
        System.out.println("You entered float " + b);
    }
}

9
import java.util.Scanner;

public class ScannerDemo {
    public static void main(String[] arguments){
        Scanner input = new Scanner(System.in);

        String username;
        double age;
        String gender;
        String marital_status;
        int telephone_number;

        // Allows a person to enter his/her name   
        Scanner one = new Scanner(System.in);
        System.out.println("Enter Name:" );  
        username = one.next();
        System.out.println("Name accepted " + username);

        // Allows a person to enter his/her age   
        Scanner two = new Scanner(System.in);
        System.out.println("Enter Age:" );  
        age = two.nextDouble();
        System.out.println("Age accepted " + age);

        // Allows a person to enter his/her gender  
        Scanner three = new Scanner(System.in);
        System.out.println("Enter Gender:" );  
        gender = three.next();
        System.out.println("Gender accepted " + gender);

        // Allows a person to enter his/her marital status
        Scanner four = new Scanner(System.in);
        System.out.println("Enter Marital status:" );  
        marital_status = four.next();
        System.out.println("Marital status accepted " + marital_status);

        // Allows a person to enter his/her telephone number
        Scanner five = new Scanner(System.in);
        System.out.println("Enter Telephone number:" );  
        telephone_number = five.nextInt();
        System.out.println("Telephone number accepted " + telephone_number);
    }
}

5
প্রতিবার নতুন স্ক্যানার তৈরি হওয়ার কোনও বিশেষ কারণ রয়েছে, বা এটি কীভাবে কাজ করে তা না বুঝেই কেবল অনুলিপি + পেস্ট করা হচ্ছে?
এভেজেনি সার্জিভ

1
@ ইভজেনিসারজিভ নতুন স্ক্যানার হ'ল ব্যবহারকারীর ইনপুট পেতে আপনি তৈরি করেছেন। স্ক্যানার ক্লাসে আরও পড়ুন ...
ব্যবহারকারী 3598655

অবশ্যই অনুলিপি করা হয়েছে। প্রতিবার নতুন স্ক্যানারের প্রয়োজন নেই (এটি জাভা ভেরিয়েবল নামকরণ কনভেনশন অনুসরণ করে না)।
জিনোমেড

6

আপনি ব্যবহারকারীর নাম জিজ্ঞাসা করতে একটি সহজ প্রোগ্রাম তৈরি করতে পারেন এবং উত্তরটি যে কোনও উত্তরই দেয়।

অথবা ব্যবহারকারীকে দুটি সংখ্যা লিখতে বলুন এবং আপনি এই সংখ্যাগুলি যুক্ত করতে পারেন, গুণ করতে পারেন, বিয়োগ করতে পারেন বা ভাগ করতে পারেন এবং উত্তরগুলির মুদ্রণ করতে পারেন যেমন কোনও ক্যালকুলেটরের আচরণের মতো p

সুতরাং সেখানে আপনার স্ক্যানার ক্লাস দরকার। আপনার import java.util.Scanner;করতে হবে এবং কোডটিতে আপনার ব্যবহার করতে হবে:

Scanner input = new Scanner(System.in);

input একটি পরিবর্তনশীল নাম।

Scanner input = new Scanner(System.in);

System.out.println("Please enter your name: ");
s = input.next(); // Getting a String value

System.out.println("Please enter your age: ");
i = input.nextInt(); // Getting an integer

System.out.println("Please enter your salary: ");
d = input.nextDouble(); // Getting a double

কিভাবে এই পৃথক দেখুন: input.next();, i = input.nextInt();,d = input.nextDouble();

একটি স্ট্রিং অনুসারে, int এবং ডাবল বাকী অংশের জন্য একইভাবে পরিবর্তিত হয়। আপনার কোডের শীর্ষে আমদানি বিবৃতিটি ভুলে যাবেন না।


2
এটি আসলে একটি যথাযথ ব্যাখ্যা, তবে আপনি যদি এরপরে আরও কিছু পদ্ধতি যুক্ত করেন তবে এটি আরও ভাল হতে পারে যেমন নেক্সটলাইন (), নেক্সটলং () .. ইত্যাদি
সুভাষিস

শিক্ষার্থীদের অবশ্যই উদাহরণগুলি অনুসরণ করে বাকী পদ্ধতিগুলি পরীক্ষা করতে হবে এবং নিজেরাই শিখতে হবে যা আমি নিজের অভিজ্ঞতার সাথে শেখার হিসাবে বিশ্বাস করি।
ব্যবহারকারী 3598655

4

একটি সাধারণ উদাহরণ:

import java.util.Scanner;

public class Example
{
    public static void main(String[] args)
    {
        int number1, number2, sum;

        Scanner input = new Scanner(System.in);

        System.out.println("Enter First multiple");
        number1 = input.nextInt();

        System.out.println("Enter second multiple");
        number2 = input.nextInt();

        sum = number1 * number2;

        System.out.printf("The product of both number is %d", sum);
    }
}

3

যখন ব্যবহারকারী তার / তার প্রবেশ করে username, বৈধ প্রবেশের জন্যও পরীক্ষা করুন।

java.util.Scanner input = new java.util.Scanner(System.in);
String userName;
final int validLength = 6; // This is the valid length of an user name

System.out.print("Please enter the username: ");
userName = input.nextLine();

while(userName.length() < validLength) {

    // If the user enters less than validLength characters
    // ask for entering again
    System.out.println(
        "\nUsername needs to be " + validLength + " character long");

    System.out.print("\nPlease enter the username again: ");
    userName = input.nextLine();
}

System.out.println("Username is: " + userName);

2
  1. ইনপুট পড়তে:

    Scanner scanner = new Scanner(System.in);
    String input = scanner.nextLine();
  2. আপনি যখন কিছু যুক্তি / পরামিতি সহ কোনও পদ্ধতি কল করবেন তখন ইনপুট পড়তে:

    if (args.length != 2) {
        System.err.println("Utilizare: java Grep <fisier> <cuvant>");
        System.exit(1);
    }
    try {
        grep(args[0], args[1]);
    } catch (IOException e) {
        System.out.println(e.getMessage());
    }

1
আপনার পাঠ্য / কোডটি ফর্ম্যাট করার বিষয়ে আপনার এই সহায়তা পৃষ্ঠাটি পড়তে হবে: stackoverflow.com/help/formatting
টম

আপনি এটি অনুবাদ করতে চাইতে পারেন (ফরাসি থেকে?)
পিটার মর্টেনসেন

2
import java.util.*;

class Ss
{
    int id, salary;
    String name;

   void Ss(int id, int salary, String name)
    {
        this.id = id;
        this.salary = salary;
        this.name = name;
    }

    void display()
    {
        System.out.println("The id of employee:" + id);
        System.out.println("The name of employye:" + name);
        System.out.println("The salary of employee:" + salary);
    }
}

class employee
{
    public static void main(String args[])
    {
        Scanner sc = new Scanner(System.in);

        Ss s = new Ss(sc.nextInt(), sc.nextInt(), sc.nextLine());
        s.display();
    }
}

2

এখানে প্রয়োজনীয় শ্রেণি যা সম্পূর্ণ অপারেশন সম্পাদন করে:

import java.util.Scanner;

public class App {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        final int valid = 6;

        Scanner one = new Scanner(System.in);
        System.out.println("Enter your username: ");
        String s = one.nextLine();

        if (s.length() < valid) {
            System.out.println("Enter a valid username");
            System.out.println(
                "User name must contain " + valid + " characters");
            System.out.println("Enter again: ");
            s = one.nextLine();
        }

        System.out.println("Username accepted: " + s);

        Scanner two = new Scanner(System.in);
        System.out.println("Enter your age: ");
        int a = two.nextInt();
        System.out.println("Age accepted: " + a);

        Scanner three = new Scanner(System.in);
        System.out.println("Enter your sex: ");
        String sex = three.nextLine();
        System.out.println("Sex accepted: " + sex);
    }
}

1
এর একাধিক উদাহরণ ব্যবহার করার কোনও কারণ নেই Scanner
রেডিওডেফ

1

আপনি এই কোডটি প্রবাহিত করতে পারেন:

Scanner obj= new Scanner(System.in);
String s = obj.nextLine();

1
এটি নতুন তথ্য সরবরাহ করে না এবং অনুপস্থিত ব্যাখ্যার কারণে বিদ্যমান উত্তরের চেয়ে কম সহায়ক।
টম

1
"এই কোডটি প্রবাহ করুন" বলতে কী বোঝ ? আপনার অর্থ "এই কোডটি অনুসরণ করুন" ? অথবা অন্য কিছু?
পিটার মর্টেনসেন


0

কনসোল থেকে পড়ার সহজ উপায় রয়েছে।

দয়া করে নীচের কোডটি সন্ধান করুন:

import java.util.Scanner;

    public class ScannerDemo {

        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);

            // Reading of Integer
            int number = sc.nextInt();

            // Reading of String
            String str = sc.next();
        }
    }

বিস্তারিত বোঝার জন্য দয়া করে নীচের নথিগুলি দেখুন।

ডক

এখন স্ক্যানার ক্লাসে কাজ করার বিস্তারিত বোঝার বিষয়ে কথা বলা যাক:

public Scanner(InputStream source) {
    this(new InputStreamReader(source), WHITESPACE_PATTERN);
}

এটি স্ক্যানার দৃষ্টান্ত তৈরির জন্য নির্মাণকারী।

এখানে আমরা InputStreamরেফারেন্সটি পাস করছি যা একটি ছাড়া আর কিছুই নয় System.In। এখানে এটি InputStreamকনসোল ইনপুটটির জন্য পাইপটি খোলে ।

public InputStreamReader(InputStream in) {
    super(in);
    try {
        sd = StreamDecoder.forInputStreamReader(in, this, (String)null); // ## Check lock object
    }
    catch (UnsupportedEncodingException e) {
        // The default encoding should always be available
        throw new Error(e);
    }
}

System.in পাস করার মাধ্যমে এই কোডটি কনসোল থেকে পড়ার জন্য সকেট খুলবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.