Java'daki Scanner sınıfını kullanarak konsoldan girişi nasıl okuyabilirim?


224

ScannerSınıfı kullanarak konsoldan nasıl girdi okuyabilirim ? Bunun gibi bir şey:

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

Temel olarak, istediğim tek şey tarayıcının kullanıcı adı için bir girişi okuması ve girdiyi bir Stringdeğişkene atamasıdır.



Yanıtlar:


341

java.util.ScannerÇalışmaların tek bir tamsayıyı nasıl okuyacağını gösteren basit bir örnek System.in. Gerçekten çok basit.

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

Bir kullanıcı adı almak için muhtemelen kullanırım 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)Giriş üzerinde daha fazla kontrol sahibi olmak veya sadece usernamedeğişkeni doğrulamak istiyorsanız da kullanabilirsiniz .

Uygulamaları hakkında daha fazla bilgi için API Dokümantasyonunda bulabilirsiniz.java.util.Scanner


1
Tarayıcıyı yalnızca bir kez kullandığımı ve Tarayıcı'yı kapatarak kodumu karıştırmak istemediğimi varsayalım - bir sınıf oluşturmadan kullanıcıdan girdi almanın bir yolu var mı?
Nearoo

3
JDK 8'de aşağıdakiler gibi bir kaynak ifadesiyle deneme kullanabilirsiniz; deneyin (Tarayıcı tarayıcı = yeni Tarayıcı (System.in)) {}
Vikestad Rune

33
Scanner scan = new Scanner(System.in);
String myLine = scan.nextLine();

24

Konsoldan Veri Okuma

  • BufferedReadersenkronize edildiğinden, bir BufferedReader'daki okuma işlemleri birden çok iş parçacığından güvenle yapılabilir. Arabellek boyutu belirtilebilir veya varsayılan boyut ( 8192 ) kullanılabilir. Varsayılan, çoğu amaç için yeterince büyüktür.

    readLine () «, veriyi akıştan veya kaynaktan satır satır okur. Bir satır aşağıdakilerden herhangi biri tarafından sonlandırılır: \ n, \ r (veya) \ r \ n

  • Scannergirdisini, varsayılan olarak boşluk (\ s) ile eşleşen ve tarafından tanınan bir sınırlayıcı desen kullanarak belirteçlere böler Character.isWhitespace.

    « Kullanıcı veri girene kadar tarama işlemi bloke edilerek giriş bekleyebilir. « Bir akıştan belirli bir tür jetonu ayrıştırmak istiyorsanız Tarayıcı ( BUFFER_SIZE = 1024 ) kullanın. « Ancak bir tarayıcı iş parçacığı için güvenli değildir. Harici olarak senkronize edilmelidir.

    next () «Bu tarayıcıdan sonraki tam jetonu bulur ve döndürür. nextInt () «Girişin sonraki simgesini int olarak tarar.

kod

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

Akış girişleri ve çıkışları

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

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

Bu şimdi orijinal imo'dan daha iyi, daha güncel bir cevap.
mantıkOnAbstrasyonlar

Daha fazla bilgi için, bkz. BufferedReader, ScannerYerel Dosya (OR) Ağ Dosyasından veri okumak.
Yash

14

İnput.nextInt () yöntemiyle ilgili bir sorun var - yalnızca int değerini okuyor.

Yani input.nextLine () kullanarak sonraki satırı okurken "\ n", yani Enteranahtarı alırsınız . Bunu atlamak için input.nextLine () öğesini eklemeniz gerekir.

Şöyle deneyin:

 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

Kullanıcıdan girdi almanın birkaç yolu vardır. Burada bu programda görevi başarmak için Scanner sınıfını alacağız. Bu Tarayıcı sınıfı gelir java.util, bu nedenle programın ilk satırı import java.util.Scanner; kullanıcının Java'daki çeşitli türlerdeki değerleri okumasını sağlar. İçe aktarma ifadesi satırının java programının ilk satırında olması gerekir ve kod için daha ileriye gideriz.

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

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

Scanner sınıfındaki yöntemlere erişmek için "in" olarak yeni bir tarayıcı nesnesi oluşturun. Şimdi onun yöntemlerinden birini kullanıyoruz, yani "sonraki". "Next" yöntemi, kullanıcının klavyeye girdiği metin dizesini alır.

Burada in.nextLine();kullanıcının girdiği String almak için kullanıyorum .

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
Her seferinde yeni bir Tarayıcı oluşturulmasının belirli bir nedeni var mı, yoksa bu nasıl çalıştığını anlamadan sadece kopyala + yapıştır mı?
Evgeni Sergeev

1
@EvgeniSergeev yeni Tarayıcı, kullanıcı girdisini almak için oluşturduğunuz nesnedir. daha fazla oku Scanner class ...
user3598655

kesinlikle kopya yapıştırıldı. Her seferinde yeni bir tarayıcıya gerek yoktur (bu ayrıca java değişkeni adlandırma kuralına uymaz).
gnomed

6

Kullanıcının adını soracak basit bir program oluşturabilir ve yanıt kullanım girdilerini yazdırabilirsiniz.

Veya kullanıcıdan iki sayı girmesini isteyin ve bu sayıları hesap makinesinin davranışı gibi kullanıcı girişleri için toplayabilir, çarpabilir, çıkarabilir veya bölebilirsiniz.

Yani burada Tarayıcı sınıfına ihtiyacınız var. Yapmanız gerekir import java.util.Scanner;ve kodda kullanmanız gerekir:

Scanner input = new Scanner(System.in);

input değişken adıdır.

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

Bu nasıl farklılık bakınız: input.next();, i = input.nextInt();,d = input.nextDouble();

Bir String'e göre int ve double, geri kalanı için aynı şekilde değişir. Kodunuzun üst kısmındaki içe aktarma ifadesini unutmayın.


2
Bu aslında doğru bir açıklamasıdır, Ama .. vs nextLine (), nextLong () gibi ona biraz daha yöntemleri eklerseniz daha iyi olabilir
subhashis

Öğrenciler örnekleri takip etmeli ve diğer yöntemleri test etmeli ve kendi deneyimleriyle öğrenme olarak inandığım şeyi kendileri öğrenmelidir.
user3598655

4

Basit bir örnek:

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

Kullanıcı girdiği zaman, usernamegeçerli girişi de kontrol edin.

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. Girişi okumak için:

    Scanner scanner = new Scanner(System.in);
    String input = scanner.nextLine();
  2. Bazı bağımsız değişkenler / parametrelerle bir yöntemi çağırdığınızda girdiyi okumak için:

    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
Metninizi / kodunuzu biçimlendirme hakkında bu yardım sayfasını okumalısınız: stackoverflow.com/help/formatting .
Tom

Bunu çevirmek isteyebilirsiniz (Fransızcadan mı?).
Peter Mortensen

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

Gerekli işlemi gerçekleştiren tam sınıf:

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
Öğesinin birden fazla örneğini kullanmanız için hiçbir neden yoktur Scanner.
Radiodef

1

Bu kodu aktarabilirsiniz:

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

1
Bu yeni bilgi sağlamaz ve eksik açıklamalar nedeniyle mevcut cevaplardan daha az yardımcı olur.
Tom

1
"Bu kodu akıt" ile ne demek istiyorsun ? Şunu mu demek istediniz: "bu kodu takip et" ? Veya başka bir şey?
Peter Mortensen

0

Tarayıcı sınıfını Java'da kullanabilirsiniz

Scanner scan = new Scanner(System.in);
String s = scan.nextLine();
System.out.println("String: " + s);

0

Konsoldan okumak için basit bir yol var.

Lütfen aşağıdaki kodu bulun:

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

Ayrıntılı bir anlayış için lütfen aşağıdaki belgelere bakın.

doktor

Şimdi Scanner sınıfının çalışmasının ayrıntılı olarak anlaşılması hakkında konuşalım:

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

Bu, Tarayıcı örneğini oluşturmak için yapıcıdır.

Burada a'dan InputStreambaşka bir şey olmayan referansı geçiyoruz System.In. Burada InputStreamkonsol girişi için Boru açılır .

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 içinden geçerek bu kod, konsoldan okumak için soketi açar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.