2010-08-16 4 views
2

Scanner 클래스의 useDelimiter를 사용할 때 약간의 문제가 발생합니다. I는이 입력이 있으면스캐너, useDelimiter

Scanner sc = new Scanner(System.in).useDelimiter("-"); 
while(sc.hasNext()) 
{ 
    System.out.println(sc.next()); 
} 

A-B-C는

출력

A B

될 때까지 기다린다 마지막 문자를 인쇄하기 위해 또 다른 "-"을 입력하십시오.

그러나 사용자 입력 데이터가없고 대신 스캐너에 문자열을 삽입하면 코드가 작동합니다. 그 이유는 무엇이며 어떻게 고칠 수 있습니까? StringTokenzier를 사용하고 싶지 않습니다.

답변

5

이 다른 -을 입력 할 때까지 기다리지 않으면 잘못 입력했다고 가정합니다.

내 말은 Scanner-을 입력해야하므로 다음 입력의 길이를 알 수 없기 때문에 입력해야합니다.

따라서 사용자가 A-B-CDE을 입력하고 C에 커피 한 모금을 마친 경우 올바른 입력을 얻지 못합니다. 당신은 전체 String에서 그것을 전달하는 경우 Scanner 입력의 끝이 어디 있는지 알고, 또 다른 구분 기호를 기다릴 필요가 없습니다,

(당신은 [ A, B, CDE ]을 기대하지만 [ A, B, C ]를 얻을 것이다).

내가 할 것이 어떻게 다음과

Scanner stdin = new Scanner(System.in); 
String input = stdin.nextLine(); 
String[] splitInput = input.split("-", -1); 

이제 -의 모든 사이의 데이터를 포함 Strings의 배열을해야합니다.

Here is a link to the String.split() documentation for your reading pleasure.

+0

이 방법은 없지만 전체 입력을받는 스캐너 하나와 입력을 구문 분석하는 다른 스캐너를 사용하는 방법은 무엇입니까? – starcorn

+0

@klw, 내가 편집에서 어떻게 할 것인지 알려 드리겠습니다. – jjnguy

+0

@klw,'Scanner' 만 필요합니다. – jjnguy

3

당신은 그것은 문자열 인수뿐만 아니라 System.in에서 읽는 과정에 그 기능이 작동 대안 구분 문자열 useDelimiter("-|\n"); 를 사용할 수 있습니다. System.in의 경우 줄 끝에서 enter를 눌러야합니다.

0

내가 할 것이 어떻게 다음과

Scanner stdin = new Scanner(System.in); 
String s = stdin.nextLine(); 
String[] splitInput = s.split("-", -1); 

이제 -의 모든 사이의 데이터를 포함 Strings의 배열을해야합니다.