স্ক্যানারের কাছ থেকে একটি চর ইনপুট নিন


124

আমি charকীবোর্ড থেকে একটি ইনপুট নেওয়ার উপায় খুঁজতে চেষ্টা করছি ।

আমি ব্যবহার করার চেষ্টা করেছি:

Scanner reader = new Scanner(System.in);
char c = reader.nextChar();

এই পদ্ধতিটি বিদ্যমান নেই।

আমি cহিসাবে গ্রহণ করার চেষ্টা করেছি String। তবুও, এটি সর্বদা প্রতিটি ক্ষেত্রে কাজ করে না, যেহেতু আমি আমার পদ্ধতি থেকে অন্য পদ্ধতিতে কল করছি তার জন্য একটি charইনপুট হিসাবে প্রয়োজন । সুতরাং আমাকে ইনপুট হিসাবে স্পষ্টভাবে একটি চর নিতে একটি উপায় খুঁজে বের করতে হবে।

কোন সাহায্য?

উত্তর:


159

আপনি প্রথম চরিত্রটি থেকে নিতে পারেন Scanner.next:

char c = reader.next().charAt(0);

আপনি ব্যবহার করতে পারেন ঠিক একটি অক্ষর গ্রাস করতে:

char c = reader.findInLine(".").charAt(0);

গ্রাস কঠোরভাবে একটি অক্ষর আপনি ব্যবহার করতে পারে:

char c = reader.next(".").charAt(0);


7
প্রকৃতপক্ষে এটি একাধিক চরিত্র গ্রহণ করছে, তবে কেবল প্রথম চরিত্রে অভিনয় করছে
রাল্ফ

1
@ ব্যবহারকারী1804697 স্রেফ অক্ষর ব্যবহারের জন্য char c = reader.next("[a-zA-Z]").charAt(0);
গ্রাহ্য করুন

10
এই প্রসঙ্গে "ঠিক" এবং "কঠোরভাবে" এর মধ্যে পার্থক্য কী?

2
@ রিমিস কপি পেস্টিং কোড এবং তারপরে এটি চালানোর মান ঠিক কী?
ভরাল

53

সেটআপ স্ক্যানার:

reader.useDelimiter("");

এর পরে reader.next()একটি একক-অক্ষরযুক্ত স্ট্রিং ফিরে আসবে।


17

স্ক্যানার থেকে কোনও চরিত্র পাওয়ার জন্য কোনও এপিআই পদ্ধতি নেই। আপনি STRING ব্যবহার পাওয়া উচিত scanner.next()এবং ডাকা String.charAt(0)ফিরে স্ট্রিং উপর পদ্ধতি।

Scanner reader = new Scanner(System.in);
char c = reader.next().charAt(0);

কেবল হোয়াইটস্পেসে নিরাপদ থাকতে আপনি প্রথমে যে trim()কোনও শ্বেতস্থান অপসারণ করতে স্ট্রিংয়ে কল করতে পারেন।

Scanner reader = new Scanner(System.in);
char c = reader.next().trim().charAt(0);

reader.next()প্রথমটি আপনাকে অ-সাদা চর থেকে শুরু করে স্ট্রিংটি ইতিমধ্যে দেবে না ?
নরোক 2

12

এই সমস্যার কাছে যাওয়ার জন্য তিনটি উপায় রয়েছে:

  • next()স্ক্যানারে কল করুন এবং স্ট্রিংয়ের প্রথম অক্ষরটি বের করুন (উদাহরণস্বরূপ charAt(0)) আপনি যদি বাকী রেখাটি অক্ষর হিসাবে পড়তে চান তবে স্ট্রিংয়ের অবশিষ্ট অক্ষরগুলি নিয়ে পুনরাবৃত্তি করুন। অন্যান্য উত্তরের এই কোড আছে।

  • setDelimiter("")একটি খালি স্ট্রিংয়ে ডিলিমিটার সেট করতে ব্যবহার করুন । এটি next()স্ট্রিংগুলিতে টোকেনাইজ তৈরি করবে যা হ'ল এক অক্ষর দীর্ঘ long সুতরাং আপনি অক্ষর পুনরাবৃত্তি বারবার কল করতে পারেন next().charAt(0)। তারপরে আপনি ডিলিমিটারটিকে তার মূল মূল্যে সেট করতে পারেন এবং স্ক্যানিংটি স্বাভাবিক উপায়ে আবার চালু করতে পারেন!

  • স্ক্যানার এপিআই এর পরিবর্তে রিডার এপিআই ব্যবহার করুন। Reader.read()পদ্ধতি একটি অক্ষর ইনপুট স্ট্রিম থেকে পড়তে বিতরণ করে। উদাহরণ স্বরূপ:

    Reader reader = new InputStreamReader(System.in);
    int ch = reader.read();
    if (ch != -1) {  // check for EOF
        // we have a character ...
    }

আপনি যখন কনসোলটি মাধ্যমে পড়েন System.in, ইনপুটটি সাধারণত অপারেটিং সিস্টেম দ্বারা বাফার হয় এবং যখন ব্যবহারকারী ENTER টাইপ করে কেবল তখনই অ্যাপ্লিকেশনটিতে "মুক্তি" দেওয়া হয়। সুতরাং আপনি যদি নিজের অ্যাপ্লিকেশনটির স্বতন্ত্র কীবোর্ড স্ট্রোকগুলিতে প্রতিক্রিয়া জানাতে চান তবে এটি কার্যকর হবে না। ওএস স্তরে কনসোলের জন্য লাইন-বাফারিং চালু বা বন্ধ করতে আপনার কিছু ওএস-নির্দিষ্ট নেটিভ কোড স্টাফ করতে হবে।

রেফারেন্স:


আপনি যা বলেছেন তার জন্য দয়া করে আপনি একটি উদাহরণ দিতে পারেন
রাল্ফ

4

আপনি এই সমস্যাটি সমাধান করতে পারেন, "একবারে কীবোর্ডের ইনপুট একসাথে একটি চর" দখল করার। সমস্ত স্ক্যানার ব্যবহার না করে এবং ইনপুট বাফারটিকে পার্শ্ব প্রতিক্রিয়া হিসাবে সাফ না করে এটি ব্যবহার করে।

char c = (char)System.in.read();

আপনার কেবলমাত্র যদি সি ভাষা "getChar ()" ফাংশনটির মতো একই কার্যকারিতা হয় তবে এটি দুর্দান্ত কাজ করবে। "System.in.read ()" এর বড় সুবিধাটি হ'ল বাফারটি প্রতিটি গ্রাস করার পরে আপনার সাফ হয়ে যায়। সুতরাং আপনার যদি এখনও সমস্ত ব্যবহারকারীর ইনপুট প্রয়োজন হয় তবে আপনি এখনও বাকি অংশগুলি ইনপুট বাফার থেকে পেতে পারেন। "char c = scanner.next().charAt(0);"পথ গৃহস্থালির কাজ দখল করে কিন্তু বাফার সাফ করবে।

// Java program to read character without using Scanner
public class Main
{
    public static void main(String[] args)
    {
        try {
            String input = "";
            // Grab the First char, also wait for user input if the buffer is empty.
            // Think of it as working just like getChar() does in C.
            char c = (char)System.in.read();
            while(c != '\n') {
                //<do your magic you need to do with the char here>
                input += c; // <my simple magic>

                //then grab the next char
                c = (char)System.in.read();
            }
            //print back out all the users input
            System.out.println(input);
        } catch (Exception e){
            System.out.println(e);
        }
    }
}  

আশা করি এই সহায়ক, এবং সৌভাগ্য! পিএস দুঃখিত, আমি জানি এটি একটি পুরানো পোস্ট, তবে আমি আশা করি যে আমার উত্তরটি নতুন অন্তর্দৃষ্টি নিয়ে আসে এবং এই সমস্যাজনিত অন্যান্য ব্যক্তিদেরও সহায়তা করতে পারে।


3

এটি আসলে কাজ করে না:

char c = reader.next().charAt(0);

এই প্রশ্নে কিছু ভাল ব্যাখ্যা এবং রেফারেন্স রয়েছে: স্ক্যানার শ্রেণির কেন নেক্সটচার পদ্ধতি নেই? "একটি স্ক্যানার একটি ডিলিমিটার প্যাটার্ন ব্যবহার করে টোকেনগুলিতে তার ইনপুটটি ভেঙে দেয়", যা বেশ খোলা সমাপ্ত। উদাহরণস্বরূপ এটি ব্যবহার করার সময়

c = lineScanner.next().charAt(0);

এই ইনপুট "(1 + 9) / (3 - 1) + 6 - 2" পরবর্তী রিটার্নের জন্য কল "(1", সি সেট করা হবে '(', এবং আপনি ' পরের কলটিতে 1 'পরের ()

সাধারণত যখন আপনি একটি চরিত্র পেতে চান আপনি সাদা স্থান উপেক্ষা করতে চান ignore এটি আমার পক্ষে কাজ করেছে:

c = lineScanner.findInLine("[^\\s]").charAt(0);

রেফারেন্স: একটি একক অক্ষরের সাথে মিলে যাওয়ার জন্য রেজেেক্স যা কোনও স্থান ছাড়া আর কিছু নয়


এফওয়াইআই"[^\\s]" === "\\S"
বোহেমিয়ান

2

স্ক্যানার শ্রেণিতে কোনও চরিত্রের ইনপুট নেওয়ার সর্বোত্তম উপায় হ'ল:

Scanner sca=new Scanner(System.in);
System.out.println("enter a character");
char ch=sca.next().charAt(0);

1
import java.util.Scanner;

public class userInput{
    public static void main(String[] args){
        // Creating your scanner with name kb as for keyBoard
        Scanner kb = new Scanner(System.in);

        String name;
        int age;
        char bloodGroup;
        float height;

        // Accepting Inputs from user
        System.out.println("Enter Your Name");
        name = kb.nextLine(); // for entire line of String including spaces
        System.out.println("Enter Your Age");
        age = kb.nextInt(); // for taking Int
        System.out.println("Enter Your BloodGroup : A/B/O only");
        bloodGroup  = kb.next().charAt(0); // For character at position 0
        System.out.println("Enter Your Height in Meters");
        height = kb.nextFloat(); // for taking Float value

        // closing your scanner object
        kb.close();

        // Outputting All
        System.out.println("Name : " +name);
        System.out.println("Age : " +age);
        System.out.println("BloodGroup : " +bloodGroup);
        System.out.println("Height : " +height+" m");

    }
}


1

স্ট্রিং পড়া থেকে প্রথম অক্ষর বের করার পরিবর্তে দ্রুত ফলাফলের জন্য আপনার কাস্টম ইনপুট রিডারটি ব্যবহার করা উচিত। কাস্টম স্ক্যানারীডার এবং ব্যাখ্যাটির জন্য লিঙ্ক: https://gist.github.com/nik1010/5a90fa43399c539bb817069a14c3c5a8

স্ক্যান স্ক্যান করার জন্য কোড:

BufferedInputStream br=new BufferedInputStream(System.in);
char a= (char)br.read();

আপনার উত্তরে গিস্ট থেকে কোডটি যুক্ত করা উচিত কারণ এটি কিছু সময় অনুপলব্ধ হতে পারে।
মারকাস

@ মারকাস স্ক্যান করে চার্ট যোগ করা হয়েছে।
নিকুঞ্জ খোকর

1

দুটি পন্থা রয়েছে, আপনি হয় সঠিকভাবে একটি চরিত্র নিতে পারেন বা কঠোরভাবে একটি অক্ষর নিতে পারেন । আপনি যখন সঠিকভাবে ব্যবহার করবেন, পাঠক কেবলমাত্র প্রথম অক্ষরটি গ্রহণ করবেন, আপনি যতগুলি অক্ষর ইনপুট করেন তা নির্বিশেষে।

উদাহরণ স্বরূপ:

import java.util.Scanner;  

public class ReaderExample {  

    public static void main(String[] args) {  

        try {  

        Scanner reader = new Scanner(System.in);

        char c = reader.findInLine(".").charAt(0);

            reader.close();  

            System.out.print(c);

        } catch (Exception ex) {  

            System.out.println(ex.getMessage());  

        }



    }  

}  

আপনি যখন ইনপুট হিসাবে অক্ষরের একটি সেট দেন, "অ্যাবসিডি" বলুন, পাঠক কেবল প্রথম অক্ষর হিসাবে বিবেচনা করবেন, অক্ষরটি 'এ'

আপনি যখন কঠোরভাবে ব্যবহার করবেন তখন ইনপুটটি কেবল একটি অক্ষর হওয়া উচিত। যদি ইনপুটটি একাধিক চরিত্রের হয় তবে পাঠক ইনপুট গ্রহণ করবেন না

import java.util.Scanner;  

public class ReaderExample {  

    public static void main(String[] args) {  

        try {  

        Scanner reader = new Scanner(System.in);

        char c = reader.next(".").charAt(0);

            reader.close();  

            System.out.print(c);

        } catch (Exception ex) {  

            System.out.println(ex.getMessage());  

        }



    }  

}  

মনে করুন আপনি "abcd" ইনপুট দেন, কোনও ইনপুট নেওয়া হয় নি, এবং ভেরিয়েবল সি এর নাল মান হবে।


0
package Pack;

import java.util.Scanner;

public class test { 
    public static void main(String[] args) {

        Scanner reader = new Scanner(System.in);
        char c = reader.next(".").charAt(0);

    }
}

কেবলমাত্র একটি চরিত্রের জন্য c = রিডার.এনেক্সট ("।")। চরআউট (0);


কেবলমাত্র একটি চরিত্রের জন্য c = রিডার.এনেক্সট ("।")। চরআউট (0);
রাকেশ কুমার বি

0
// Use a BufferedReader to read characters from the console.
import java.io.*;
class BRRead {
public static void main(String args[]) throws IOException
{
char c;
BufferedReader br = new
BufferedReader(new InputStreamReader(System.in));
System.out.println("Enter characters, 'q' to quit.");
// read characters
do {
c = (char) br.read();
System.out.println(c);
} while(c != 'q');
}
}

0

আপনার স্ক্যানার.নেক্সট () ব্যবহার করে স্ট্রিংটি পাওয়া উচিত এবং ফিরে আসা স্ট্রিংয়ে স্ট্রিং.ক্যারএট (0) পদ্ধতিটি আহ্বান করা উচিত।
এক্সপ্লে:

    import java.util.Scanner;

    public class InputC{


            public static void main(String[] args) {
                // TODO Auto-generated method stub
                   // Declare the object and initialize with
                   // predefined standard input object
                    Scanner scanner = new Scanner(System.in);
                    System.out.println("Enter a character: ");
                    // Character input
                    char c = scanner.next().charAt(0);
                    // Print the read value
                    System.out.println("You have entered: "+c);
            }


        }

আউটপুট

Enter a character: 
a
You have entered: a


-1
import java.io.*;

class abc // enter class name (here abc is class name)
{
    public static void main(String arg[])
    throws IOException // can also use Exception
    {
        BufferedReader z =
            new BufferedReader(new InputStreamReader(System.in));

        char ch = (char) z.read();
    } // PSVM
} // class


-1
Scanner key = new Scanner(System.in);
//shortcut way 
char firstChar=key.next().charAt(0);  
//how it works;
/*key.next() takes a String as input then,
charAt method is applied on that input (String)
with a parameter of type int (position) that you give to get      
that char at that position.
You can simply read it out as: 
the char at position/index 0 from the input String
(through the Scanner object key) is stored in var. firstChar (type char) */

//you can also do it in a bit elabortive manner to understand how it exactly works
String input=key.next();  // you can also write key.nextLine to take a String with spaces also
char firstChar=input.charAt(0);
char charAtAnyPos= input.charAt(pos);  // in pos you enter that index from where you want to get the char from

যাইহোক, আপনি ইনপুট হিসাবে সরাসরি কোনও চর নিতে পারবেন না। আপনি উপরে দেখতে পারেন যে একটি স্ট্রিং প্রথমে চার্ট (0) নেওয়া হয়; পাওয়া যায় এবং সঞ্চিত হয়


-1

শুধু ব্যবহার করুন ...

Scanner keyboard = new Scanner(System.in);
char c = keyboard.next().charAt(0);

এটি পরবর্তী ইনপুটটির প্রথম অক্ষর পায়।


-2

আপনি টাইপকাস্টিং ব্যবহার করতে পারেন:

Scanner sc= new Scanner(System.in);
char a=(char) sc.next();

এভাবে আপনি 'নেক্সট ()' ফাংশনের কারণে স্ট্রিংয়ে ইনপুট নেবেন তবে তবে বন্ধনীতে উল্লিখিত 'চর' এর কারণে এটি অক্ষরে রূপান্তরিত হবে।

বন্ধনীতে গন্তব্য ডেটা ধরণের উল্লেখ করে ডেটা ধরণের রূপান্তর করার এই পদ্ধতিকে টাইপিকেটিং বলে। এটি আমার পক্ষে কাজ করে, আমি আশা করি এটি আপনার পক্ষে কাজ করে :)


আপনি একটি typecast করতে পারবে না Stringএকটি থেকে char
স্টিফেন সি

-3

প্রদত্ত স্টিংয়ে কোনও অক্ষরের সূচি খুঁজে পেতে, আপনি এই কোডটি ব্যবহার করতে পারেন:

package stringmethodindexof;

import java.util.Scanner;
import javax.swing.JOptionPane;

/**
 *
 * @author ASUS//VERY VERY IMPORTANT
 */
public class StringMethodIndexOf {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        String email;
        String any;
        //char any;

//any=JOptionPane.showInputDialog(null,"Enter any character or string to find out its INDEX NUMBER").charAt(0);       
//THE AVOBE LINE IS FOR CHARACTER INPUT LOL
//System.out.println("Enter any character or string to find out its INDEX NUMBER");
       //Scanner r=new Scanner(System.in);
      // any=r.nextChar();
        email = JOptionPane.showInputDialog(null,"Enter any string or anything you want:");
         any=JOptionPane.showInputDialog(null,"Enter any character or string to find out its INDEX NUMBER");
        int result;
        result=email.indexOf(any);
        JOptionPane.showMessageDialog(null, result);

    }

}

-7

সবচেয়ে সহজ উপায় হ'ল প্রথমে ভেরিয়েবলটিকে স্ট্রিংয়ে পরিবর্তন করুন এবং ইনপুটটিকে স্ট্রিং হিসাবে স্বীকার করুন। তারপরে আপনি ইনপুট ভেরিয়েবলের উপর ভিত্তি করে একটি if-অন্যথায় বা সুইচ স্টেটমেন্টের সাহায্যে নিয়ন্ত্রণ করতে পারেন can

Scanner reader = new Scanner(System.in);

String c = reader.nextLine();
switch (c) {
    case "a":
        <your code here>
        break;
    case "b":
        <your code here>
        break;
    default: 
        <your code here>
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.