web-dev-qa-db-ja.com

スキャナーが文全体を読み取らない-スキャナークラスのnext()とnextLine()の違い

ユーザーが自分のデータを入力して出力できるようにするプログラムを書いています。その3/4は正しいが、住所の出力に到達すると、Wordのみが印刷され、「Archbishop Street」から「Archbishop」とのみ言うことができます。どうすれば修正できますか?

import Java.util.*;

class MyStudentDetails{
    public static void main (String args[]){
        Scanner s = new Scanner(System.in);
        System.out.println("Enter Your Name: ");
        String name = s.next();
        System.out.println("Enter Your Age: ");
        int age = s.nextInt();
        System.out.println("Enter Your E-mail: ");
        String email = s.next();
        System.out.println("Enter Your Address: ");
        String address = s.next();

        System.out.println("Name: "+name);
        System.out.println("Age: "+age);
        System.out.println("E-mail: "+email);
        System.out.println("Address: "+address);
    }
}
18
Bonett09

このアプローチは機能していますが、どのように機能するのか、誰にも説明できません。

String s = sc.next();
s += sc.nextLine();
32

この方法でスキャナを初期化し、改行文字を使用して入力を区切るようにします。

Scanner sc = new Scanner(System.in).useDelimiter("\\n");

詳細については JavaDoc を参照してください

Sc.next()を使用して、文字列の行全体を取得します

13
Nomad

私は使うだろう - Scanner#nextLinenext属性のaddressとは反対です。

このメソッドは、現在の行の残りを返します。末尾の行区切り文字は除きます。

これにより、行区切り文字で区切られた行全体が返されるため、ユーザーは制約なしで任意のアドレスを入力できます。

11

Scannerのデフォルトの区切り文字は空白です。これを変更する方法については、 javadoc を確認してください。

5
Raghuram
String s="Hi";
String s1="";

//For Reading Line by hasNext() of scanner 
 while(scan.hasNext()){
  s1 = scan.nextLine();
 }
System.out.println(s+s1);

/*This Worked Fine for me for reading Entire Line using Scanner*/
5
Vinayak

System.inおよびSystem.outを直接使用する代わりに、 Console クラスを使用します-プロンプトを表示し、行全体を読み取ることができます(それにより、問題を修正します) )1回の呼び出しでの入力:

String address = System.console().readLine("Enter your Address: ");
4

私は次のコードを試しましたが、ブレーク条件がないので停止していませんので、常に入力を待っています、ブレークの条件を追加できるかもしれません

public class Solution {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int i = scan.nextInt();
        double d = scan.nextDouble();
        String s="";
        while(scan.hasNext())
        {
            s=scan.nextLine();
        }

        System.out.println("String: " +s);
        System.out.println("Double: " + d);
        System.out.println("Int: " + i);
    }
}
2
Asid
import Java.util.Scanner;
public class Solution {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int i = scan.nextInt();
        double d = scan.nextDouble();
        String s="";
        while(scan.hasNext())
        {
            s=scan.nextLine();
        }

        System.out.println("String: " +s);
        System.out.println("Double: " + d);
        System.out.println("Int: " + i);
    }
}
2

Scan.nextLineを使用して簡単に実行できます。最後まで入力の残りを読み取ります。次に、それを変数に割り当てます。文全体を簡単に印刷できます。理解を深めるための例を次に示します。

    String s = "HackerRank ";

    Scanner scan = new Scanner(System.in);


    String s2;



    scan.nextLine(); // read the rest of the line of input (newline character after the double token).
    s2 = scan.nextLine();



    /* Concatenate and print the String variables on a new line integer variables on a new line; 

    System.out.println(s + s2);

    scan.close();

}}

2
Malsha
import Java.util.Scanner;

public class Solution {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String s = scan.next();
        s += scan.nextLine();
        System.out.println("String: " + s);

    }
}
1
ayush sharma

Java.util.Scanner; util-パッケージ、スキャナー-クラス

  1. next()は、スペースの前の文字列を読み取ります。最初のスペースを取得した後は何も読み取れません。
  2. nextLine()は行全体を読み取ります。行末または「/ n」まで読み取ります。 注:次の行ではありません

(例)

人生における私の使命は、単に生き残ることではなく、成功することです。

そして、いくらかの情熱、思いやり、ユーモアでそうすること。

(出力)

  1. 俺の

  2. 人生における私の使命は、単に生き残ることではなく、成功することです。

トリック:

次の行を読みたい場合は、Java hasメソッドを確認してください。

while (scanner.hasNext()) {
    scan.next();
}

while (scanner.hasNext()) {
    scan.nextLine();
}
0
venkatSkpi

以下は、Java Scannerクラスを使用して標準入力の行を読み取るサンプルコードです。

import Java.util.Scanner;

public class Solution {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String s = scan.nextLine();
        System.out.println(s);
        scan.close();
    }
}

入力:

こんにちは世界

出力:

こんにちは世界

0
Satyajit Mishra

「Wordを印刷するだけで、「Archbishop Street」から「Archbishop」とだけ言うことができます」

Next()、nextInt()などのScanner関数は、一度にトークンのみを読み取るため、Wordを印刷するだけです。したがって、この関数は次のトークンを読み取って返します。

For example if you have: x y z
 s.next() will return x
 s.nextLine() y z

「Archbishop Street」という行全体を読みたい場合は、コードに戻ります

String address = s.next(); // s = "Archbishop"
Then address += s.nextLine(); // s = s + " Street"
0
MLY

トークン区切り文字を改行パターンに設定し、次のトークンを読み取ってから、区切り文字を元の文字に戻します。

public static String readLine(Scanner scanner) {
        Pattern oldDelimiter = scanner.delimiter();
        scanner.useDelimiter("\\r\\n|[\\n\\x0B\\x0C\\r\\u0085\\u2028\\u2029]");
        String r = scanner.next();
        scanner.useDelimiter(oldDelimiter);
        return r;
}
0
Gubatron

以下のコードは、あなたが探していることをするはずです:

public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    String s = scan.nextLine();
    System.out.println(s);
    scan.close();
}
0
akshaya pandey

アドレス全体を追加するには

s.nextLine();//read the rest of the line as input

System.out.println("Enter Your Address: ");
String address = s.next();
0
Bharathi Mohan