next()
과 의 주요 차이점은 무엇입니까 nextLine()
?
내 주요 목표는 모든 소스 (예 : 파일)에 Scanner
"연결"될 수 있는를 사용하여 모든 텍스트를 읽는 것입니다 .
어느 것을 선택해야하며 그 이유는 무엇입니까?
답변:
나는 항상 입력을 읽고 nextLine()
문자열을 파싱하는 것을 선호 합니다.
를 사용 next()
하면 구분 기호 앞에 오는 것만 반환합니다 (기본값은 공백). nextLine()
현재 라인을 반환 한 후 자동으로 스캐너를 아래로 이동합니다.
에서 분석 데이터에 대한 유용한 도구가 nextLine()
될 것이다 str.split("\\s+")
.
String data = scanner.nextLine();
String[] pieces = data.split("\\s+");
// Parse the pieces
Scanner 클래스 또는 String 클래스에 대한 자세한 내용은 다음 링크를 참조하십시오.
스캐너 : http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html
문자열 : http://docs.oracle.com/javase/7/docs/api/java/lang/String.html
BufferedReader
를 사용하여 한 줄씩 읽지 않는 이유는 무엇입니까? 왜 Scanner
그렇게 유행 하는지 이해가 안 돼요 .
next()
공간까지만 입력을 읽을 수 있습니다. 공백으로 구분 된 두 단어를 읽을 수 없습니다. 또한 next()
입력을 읽은 후 커서를 같은 줄에 놓습니다.
nextLine()
단어 사이의 공백을 포함하여 입력을 읽습니다 (즉, 줄 끝까지 읽음 \n
). 입력을 읽으면 nextLine()
커서를 다음 줄에 놓습니다.
전체 줄을 읽으려면 nextLine()
.
JavaDoc에서 :
- A
Scanner
는 기본적으로 공백과 일치하는 구분 기호 패턴을 사용하여 입력을 토큰으로 나눕니다.next()
:이 스캐너에서 다음 완전한 토큰을 찾아 반환합니다.nextLine()
: 현재 줄을 지나서이 스캐너를 진행하고 건너 뛴 입력을 반환합니다.
따라서의 경우 "small example<eol>text"
next()
"small" nextLine()
을 반환하고 "small example"을 반환해야합니다.
next()
포함 하지 않는 이유는 무엇 \n
입니까 ??
next ()를 제외하고는 nextLine ()이 전체 라인을 스캔하는 공간까지만 스캔한다는 점 은 nextLine ()이 완전한 토큰을 기다리지 않고 '\ n'일 때 완전한 토큰을 얻을 때까지 대기 한다는 것입니다. (즉, Enter 키를 누르면) 스캐너 커서가 다음 줄로 이동하고 건너 뛴 이전 줄로 돌아갑니다. 완전한 입력을 제공했는지 여부를 확인하지 않습니다. 심지어 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();
}
}
}
for 루프에서 next ()와 nextLine ()을 변경하여이 프로그램을 시도하고, 아무 입력없이 엔터 키 인 '\ n'을 계속 누르면 주어진 수의 경우를 누른 후 종료되는 nextLine () 메소드 를 사용할 수 있습니다 . 로 다음 () doesnot 종료 의 경우, 지정된 번호를 여기에 당신이 제공 전까지 입력합니다.
next()
실제로 어떻게 작동 하는지 보았습니다 . Enter 키를 무시하고 nexLine()
완전한 입력으로 받아들이고 캡처 된 값을 에코하면 콘솔에 복제합니다. 나는 방금 System.out.println(str[i]);
아래에 새 줄로 추가 str[i]=sc.next();
했거나str[i]=sc.nextLine();
요점은 메서드가 중지되는 위치와 메서드를 호출 한 후 커서가있는 위치를 찾는 것입니다.
모든 메서드는 커서 위치와 다음 기본 구분 기호 (공백, 탭, \ n--Enter를 눌러 생성됨) 사이에 공백을 포함하지 않는 정보를 읽습니다. 커서 nextLine()
는 커서 위치와 \ n 사이의 정보 (구분자에 의해 생성 된 공백 포함)를 읽는를 제외하고 구분자 앞에 멈추고 커서는 \ n 뒤에 멈 춥니 다.
예를 들어, 다음 그림을 고려하십시오.
|23_24_25_26_27\n
|
-> 현재 커서 위치
_
-> 공백
스트림 -> 굵게 (호출 메서드에서 얻은 정보)
다음 메서드를 호출하면 어떻게되는지 확인하세요.
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 |
그런 다음 요구 사항에 따라 메서드를 호출해야합니다.
간단히 말해서 길이 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
출력은 다음과 같습니다.
abcd abcd
프롬프트에 abcd로 입력을 입력하면 (그리고 Enter 키를 눌러 다른 줄에 다음 abcd를 입력하면 입력 프롬프트가 종료되고 출력이 표시됩니다)
출력은 다음과 같습니다.
abcd
next () 및 nextLine () 메서드는 Scanner와 연결되어 있으며 문자열 입력을 가져 오는 데 사용됩니다. 그들의 차이점은 ...
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);
}
}
산출:
c abc에 대한 문자열을 입력하십시오. def
c는 abc입니다.
d에 대한 문자열 입력
d는 def
next () 대신 nextLine ()을 사용하면
산출:
c에 대한 문자열 입력
ABC DEF
c는 ABC DEF
d에 대한 문자열 입력
GHI
d는 GHI입니다.
Scanner.next () 및 nextLine ()의 또 다른 예는 다음과 같습니다. nextLine ()은 사용자가 입력을 허용하지 않는 반면 next ()는 Scanner가 입력을 대기하고 읽도록합니다.
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"));
스캐너 는 기본적으로 Whitespaces로 알려진 구분 기호 패턴을 사용하여 입력을 토큰으로 나눕니다 .
Next () 는 한 단어를 읽는 데 사용하고 공백이 생기면 읽기를 중지하고 커서를 원래 위치로 되돌립니다. NextLine () 이것은 공백을 만나도 전체 단어를 읽는 동안 커서는 읽기가 끝나면 멈추고 커서는 줄의 끝으로 돌아갑니다 . 유는 사용할 필요가 없습니다 분리 문자를 사용하면 sentence.you 그냥 꽵를 사용할 필요로 전체 단어를 읽을하고자 할 때 ().
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);
}
두 기능 모두 다음 스캐너 토큰으로 이동하는 데 사용됩니다.
차이점은 스캐너 토큰이 생성되는 방식에 있습니다.
next ()는 구분 기호를 공백 으로 사용하여 스캐너 토큰을 생성합니다.
nextLine ()은 구분 기호를 '\ n' 으로 사용하여 스캐너 토큰을 생성합니다 (예 : Enter 키 누름).
구분자에 관한 문제도 있습니다. 질문은 모든 입력에 관한 것이었다
문제
해결책
스캐너에 구분자를 사용했고 성공적으로 나갔습니다.
예
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'까지 입력을 읽은 다음 구분 기호가 발생합니다. 따라서 s [0]은 "Hello"가되고 커서는 delimiter () 다음 위치를 가리 킵니다. s [1]을 읽으면 "World"를 스캔하고 다음 완전한 토큰으로 s [1]에 반환합니다 (Scanner 정의에 따라). nextLine ()을 사용하면 대신 엔터 버튼을 누르고 s [0]에 저장할 때까지 "Hello World"를 완전히 읽습니다. nextLine ()을 사용하여 다른 문자열을 줄 수도 있습니다. 이 예제 등을 사용하여 설명을 요청하는 것이 좋습니다.