itsource

스캐너 클래스에서 next() 메서드와 nextLine() 메서드의 차이점은 무엇입니까?

mycopycode 2022. 9. 12. 11:49
반응형

스캐너 클래스에서 next() 메서드와 nextLine() 메서드의 차이점은 무엇입니까?

의 주요 차이점은 무엇입니까?next() ★★★★★★★★★★★★★★★★★」nextLine()
을 다 입니다.Scanner임의의 소스(파일 등)에 「접속」할 수 있습니다.

어떤 것을 선택해야 하며, 그 이유는 무엇입니까?

항상 다음을 사용하여 입력 내용을 읽는 것을 선호합니다.nextLine()스트링을 해석합니다.

「」를 사용합니다.next()는 딜리미터 앞에 오는 값만 반환합니다(공백으로 구분). nextLine()현재 라인을 반환한 후 스캐너를 자동으로 아래로 이동합니다.

a a from a a a 、 a a a 。nextLine()str.split("\\s+").

String data = scanner.nextLine();
String[] pieces = data.split("\\s+");
// Parse the pieces

스캐너 클래스 또는 문자열 클래스에 대한 자세한 내용은 다음 링크를 참조하십시오.

스캐너: http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html

문자열: http://docs.oracle.com/javase/7/docs/api/java/lang/String.html

next()는 공백까지 입력을 읽을 수 있습니다.공백으로 구분된 두 단어를 읽을 수 없습니다.ㅇㅇㅇㅇ.next()입력 내용을 읽은 후 커서를 같은 줄에 놓습니다.

nextLine()).\n이 읽히면 )가 표시됩니다nextLine()하다

한 줄 때는 이렇게 하면 .nextLine().

JavaDoc에서:

  • A Scanner는 디폴트로 공백과 일치하는 딜리미터 패턴을 사용하여 입력을 토큰으로 분할합니다.
  • next(): 이 스캐너에서 다음 전체 토큰을 찾아서 반환합니다.
  • nextLine(): 이 스캐너를 현재 줄을 지나쳐서 건너뛴 입력을 반환합니다.

★★★★★★★★★의 경우"small example<eol>text" next()' '작다' '작다' '작다'를돌려주세요.nextLine()" example반환해야 .

메서드를 호출한 후 메서드가 정지하고 커서가 어디에 있는지 찾는 것이 포인트입니다.

모든 메서드는 커서 위치와 다음 기본 구분자(Enter 키를 눌러 만든 공백, 탭, \n--) 사이에 공백이 포함되지 않은 정보를 읽습니다.단, 구분자는 제외).nextLine()커서 위치와 \n 사이에 있는 정보( 딜리미터로 작성된 공백 포함)를 읽고 \n 뒤에 커서가 멈춥니다.


예를 들어 다음 그림을 생각해 보겠습니다.

|23_24_25_26_27\n

| 커서 -> 현재 커서 위치

_ -> 백 -

stream -> 굵은 글씨(콜 방식으로 취득한 정보)

다음 메서드를 호출하면 어떻게 되는지 확인하십시오.

nextInt()    

판독치 23|_24_25_26_27\n

nextDouble()

판독치 23_24|_25_26_27\n

next()

판독치 23_24_25|_26_27\n

nextLine()

판독치 23_24_25_26_27\n|


그런 다음 필요에 따라 메서드를 호출해야 합니다.

next()가 행 전체를 스캔할 때까지 nextLine()이 행 전체를 스캔할 때까지 대기하는 것을 제외하고, nextLine()이 완전한 토큰을 취득까지 대기하는 것을 알 수 있습니다.여기서 nextLine()이 완전한 토큰을 취득할 때(즉, 키를 누르면) 스캐너 커서가 다음 행으로 이동하고 이전 행이 건너뜁니다.입력이 완료되었는지 여부를 확인하지 않습니다.next()는 빈 문자열을 받지 않습니다.

public class ScannerTest {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        int cases = sc.nextInt();
        String []str = new String[cases];
        for(int i=0;i<cases;i++){
            str[i]=sc.next();
        }
     }

}

루프에 대해 next()와 nextLine()을 변경하여 이 프로그램을 시험해 보십시오.입력 없이 키를 입력하는 '\n'을 계속 누릅니다.nextLine() 메서드를 사용하면 next()이 지정한 수의 케이스를 입력하고 입력하기 전까지 종료되지 않는 케이스를 누른 후 nextLine() 메서드가 종료됩니다.

next() 메서드와 nextLine() 메서드는 스캐너와 관련지어 String 입력을 얻기 위해 사용됩니다.그들의 차이점은...

next()는 공백까지 입력을 읽을 수 있습니다.공백으로 구분된 두 단어를 읽을 수 없습니다.또한 next()는 입력을 읽은 후 커서를 같은 행에 배치합니다.

nextLine()은 단어 사이에 공백을 포함하여 입력을 읽습니다(즉, \n 행 끝까지 읽습니다).입력을 읽으면 nextLine()은 다음 행에 커서를 배치합니다.

import java.util.Scanner;

public class temp
{
    public static void main(String arg[])
    {
        Scanner sc=new Scanner(System.in);
        System.out.println("enter string for c");
        String c=sc.next();
        System.out.println("c is "+c);
        System.out.println("enter string for d");
        String d=sc.next();
        System.out.println("d is "+d);
    }
}

출력:

abc defcabc def 을 합니다.
abc이다.

d에 문자열을 입력합니다.

d는 def입니다.

next() 대신 nextLine()을 사용하는 경우

출력:

c에 문자열을 입력합니다.

ABC DEF
는 ABC (ABC DEF)입니다.
dd에합니다.


GHI이다.

즉, 길이 t의 문자열 배열을 입력하는 경우 Scanner #nextLine()은 t 행을 예상하고 문자열 배열 내의 각 엔트리는 Enter 키를 사용하여 다른 엔트리와 구별됩니다.Scanner #next()는 Enter 키를 누를 때까지 입력을 계속하지만 공백으로 구분된 배열 내에 문자열(워드)을 저장합니다.

다음 코드 조각을 살펴보겠습니다.

    Scanner in = new Scanner(System.in);
    int t = in.nextInt();
    String[] s = new String[t];

    for (int i = 0; i < t; i++) {
        s[i] = in.next();
    }

IDE의 코드 조각(예를 들어 문자열 길이 2)을 실행할 때 문자열을 다음과 같이 입력해도 상관 없습니다.

입력:- abcd abcd 또는

입력:-

abcd

abcd

출력은 abcd와 같습니다.

abcd

단, 같은 코드일 경우 next() 메서드를 nextLine()으로 바꿉니다.

    Scanner in = new Scanner(System.in);
    int t = in.nextInt();
    String[] s = new String[t];

    for (int i = 0; i < t; i++) {
        s[i] = in.nextLine();
    }

프롬프트에 - abcd abcd로 input을 입력한 경우

출력:-

abcd abcd

프롬프트에 abcd로 input을 입력하면(Enter 키를 눌러 다음 abcd를 다른 행에 입력하면 입력 프롬프트가 종료되어 출력이 표시됩니다).

출력은 다음과 같습니다.

abcd

javadocs에서

next() 지정한 문자열에서 작성된 패턴과 일치하는 경우 다음 토큰을 반환합니다.nextLine() 이 스캐너를 현재 행보다 먼저 진행하여 건너뛴 입력을 반환합니다.

어떤 것을 선택할지는 당신의 요구에 가장 적합한지에 달려 있습니다.만약 내가 파일 전체를 읽는다면, 나는 모든 파일을 가질 때까지 nextLine을 사용할 것이다.

스캐너의 메뉴얼:

스캐너는 기본적으로 공백과 일치하는 구분자 패턴을 사용하여 입력을 토큰으로 나눕니다.

next() 매뉴얼에서 다음을 수행합니다.

완전한 토큰 앞에 딜리미터 패턴과 일치하는 입력이 계속됩니다.

  • Scanner.next() 및 nextLine()의 다른 예로는 다음과 같습니다.nextLine()은 사용자가 입력할 수 없는 반면 next()는 스캐너가 입력을 기다려 읽도록 합니다.

     Scanner sc = new Scanner(System.in);
    
     do {
        System.out.println("The values on dice are :");
        for(int i = 0; i < n; i++) {
            System.out.println(ran.nextInt(6) + 1);
        }
        System.out.println("Continue : yes or no");
     } while(sc.next().equals("yes"));
    // while(sc.nextLine().equals("yes"));
    

두 기능 모두 다음 스캐너 토큰으로 이동하는 데 사용됩니다.

차이점은 스캐너 토큰이 생성되는 방식에 있습니다.

next()는 딜리미터를 공백으로 사용하여 스캐너 토큰을 생성합니다.

nextLine()은 딜리미터를 '\n'로 사용하여 스캐너 토큰을 생성합니다(Enter 키를 누름).

스캐너는 구분자 패턴을 사용하여 입력을 토큰으로 나눕니다. 이 패턴은 기본적으로 Whitespaces로 알려져 있습니다.

Next()는 단일 단어를 읽기 위해 사용합니다.단어가 공백이 되면 읽기를 중지하고 커서가 원래 위치로 돌아갑니다.NextLine()은 공백이 있는 경우에도 단어 전체를 읽습니다.읽기를 마치면 커서가 멈추고 커서가 줄의 끝으로 돌아갑니다. 따라서 전체 단어를 문장으로 읽으려면 딜리미터를 사용할 필요가 없습니다.NextLine()을 사용하면 됩니다.

 public static void main(String[] args) {
            // TODO code application logic here
           String str;
            Scanner input = new Scanner( System.in );
            str=input.nextLine();
            System.out.println(str);
       }

딜리미터에 관한 문제도 있습니다.질문은 모두 입력에 관한 것이었다

  1. 이름을 입력합니다.
  2. 나이를 입력해 주세요.
  3. 이메일을 입력합니다.
  4. 주소를 입력합니다.

문제

  1. 이름, 나이, 이메일 모두 무사히 마쳤습니다.
  2. 공백(하넷 거리)이 있는 두 단어의 주소를 생각해냈을 때 첫 번째 단어는 "하넷"이었습니다.

해결 방법

스캐너에 딜리미터를 사용하여 성공적으로 외출했습니다.

 public static void main (String args[]){
     //Initialize the Scanner this way so that it delimits input using a new line character.
    Scanner s = new Scanner(System.in).useDelimiter("\n");
    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);
}

기본 차이점은 next()로 딜리미터가 발생할 때까지 입력을 가져오고(기본적으로는 공백이지만 변경할 수도 있음) 입력한 토큰을 반환하는 것입니다.그러면 커서가 동일한 줄에 유지됩니다.반면 nextLine()에서는 Enter 버튼을 누를 때까지 입력을 스캔하여 전체를 반환하고 다음 줄에 커서를 놓습니다.**

        Scanner sc=new Scanner(System.in);
        String s[]=new String[2];
        for(int i=0;i<2;i++){
            s[i]=sc.next();
        }
        for(int j=0;j<2;j++)
        {
            System.out.println("The string at position "+j+ " is "+s[j]);
        }

**

입력값을 "Hello World"로 지정하여 이 코드를 실행해 보십시오.스캐너는 입력을 'o'까지 읽고 구분자 occurs.so s[0]가 "Hello"가 되며, 커서가 구분자 뒤에 있는 다음 위치(이 경우 'W')를 가리키며, s[1]를 읽으면 "월드"를 스캔하여 다음 완전한 토큰으로 s[1]에 반환합니다(스캐너의 정의에 따라).대신 nextLine()을 사용하면 "Hello World"가 완전히 읽혀지고 Enter 버튼을 눌러 s[0]에 저장됩니다.nextLine()을 사용하여 다른 문자열을 지정할 수도 있습니다.이 예 등을 사용하여 설명을 듣는 것이 좋습니다.

next() 메서드 [nextInt(), nextDouble() 등 여러 개의 next() 메서드가 있습니다(단어라고 생각하시면 됩니다).nextLine() 메서드스캐너의 현재 위치에서 다음 줄의 시작까지 읽습니다.

다른 저자들도 강조해 주신 것을 보고, stdin(Standard Inputs Stream)을 통해 읽기 입력에 문제가 생기지 않도록 간단한 예를 들어 설명하려고 합니다.

혼동을 피하기 위해 이해해야 할 가장 중요한 것 중 하나는 여러 줄 입력의 은 구분자로 알려진 입력 행의 끝을 나타내는 보이지 않는 구분 기호로 구성되어 있다는 입니다.

토큰을 읽는 스캐너 함수(예를 들어 next(), nextInt(), nextDouble() 등)를 호출하면 스캐너가 다음 토큰을 읽고 반환합니다.행 전체를 읽으면(nextLine(), readLine()), 현재 위치에서 다음 행의 시작까지 읽습니다.그 결과, 최신 판독의 종료와 다음 행의 선두 사이에 문자가 없는 경우, nextLine() 에의 콜에 의해서 빈 문자열이 반환되는 일이 있습니다.

예를 들어 다음 사항을 입력으로 간주합니다.

a b c
d e
f
g

다음 절차는 스캐너 개체에 대한 특정 일련의 호출이 제공된 입력을 읽는 방법을 보여 줍니다.

  1. scan.next()에 대한 호출. 다음 토큰 a를 반환합니다.
  2. scan.next()에 대한 호출. 다음 토큰 b를 반환합니다.
  3. scan.nextLine()을 호출하여 다음 토큰 c를 반환합니다.마지막 토큰의 마지막 부분부터 다음 줄의 시작 부분까지 읽기 때문에 스캐너는 공백과 문자를 반환한다는 점에 유의하십시오.
  4. scan.nextLine()을 호출하여 다음 행의 내용을 반환합니다.
  5. scan.next()에 대한 호출. 다음 토큰 f를 반환합니다.
  6. scan.nextLine()을 호출합니다.f 뒤에 있는 모든 것을 다음 행의 선두까지 반환합니다.문자가 없기 때문에 빈 문자열이 반환됩니다.
  7. scan.nextLine()을 호출하여 g를 반환합니다.

이것이 코딩 시 발생하는 많은 오해와 문제를 예방하는 데 도움이 되기를 바랍니다.

아래의 코드와 그 출력으로 그 차이를 알 수 있습니다.

    public static void main(String[] args) {
        List<String> arrayList = new ArrayList<>();
        List<String> arrayList2 = new ArrayList<>();
        Scanner input = new Scanner(System.in);

        String product = input.next();

        while(!product.equalsIgnoreCase("q")) {
            arrayList.add(product);
            product = input.next();
        }

        System.out.println("You wrote the following products \n");
        for (String naam : arrayList) {
            System.out.println(naam);
        }

        product = input.nextLine();
        System.out.println("Enter a product");
        while (!product.equalsIgnoreCase("q")) {
            arrayList2.add(product);
            System.out.println("Enter a product");
            product = input.nextLine();
        }

        System.out.println();
        System.out.println();
        System.out.println();
        System.out.println();

        System.out.println("You wrote the following products \n");
        for (String naam : arrayList2) {
            System.out.println(naam);
        }
    }

출력:

Enter a product
aaa aaa
Enter a product
Enter a product
bb
Enter a product
ccc cccc ccccc
Enter a product
Enter a product
Enter a product
q
You wrote the following products 

aaa
aaa
bb
ccc
cccc
ccccc
Enter a product
Enter a product
aaaa aaaa aaaa
Enter a product
bb
Enter a product
q




You wrote the following products 


aaaa aaaa aaaa
bb

기본 딜리미터 공간은 공백으로 구분된 제품을 다음에 사용할 때 목록에 추가하는 것이므로 공백으로 구분된 문자열을 한 줄에 입력할 때마다 서로 다른 문자열이 됩니다.nextLine을 사용하면 공백은 중요하지 않고 행 전체가 1개의 문자열이 됩니다.

언급URL : https://stackoverflow.com/questions/22458575/whats-the-difference-between-next-and-nextline-methods-from-scanner-class

반응형