Scanner에 문자를 입력받는 메서드는 next()와 nextLine()이 있다.
공백 또는 줄 바꿈을 제외한 입력부터 공백 또는 줄 바꿈 직전까지의 입력까지 입력 받는다.
예를 들어 <공백><공백>123<공백><\n>을 입력했다고 하자.
next()는 공백을 무시하기 때문에 앞의 공백을 제외한 123을 입력 받는다.
여기서 주의할 점은 버퍼에 <공백><\n>이 남는다는 점이다.
공백을 포함한 문자열을 줄바꿈(\n)을 입력 받을때 까지 입력 받는다.
예를 들어 <공백><공백>123<공백><\n> 을 입력했다고 하자.
nextLine()은 공백을 포함하고, \n을 받기 전까지 입력을 받기 때문에
<공백><공백>123<공백>을 입력받은 후 <\n>을 버퍼에서 지운다.
따라서 버퍼에는 아무것도 남지 않는다.
<\n>자체는 저장하지 않으므로 print를 사용했을 때 줄 바꿈이 일어나지 않는다.
nextLine()은 <\n>을 입력 받으면 입력이 종료된다고 했다.
입력을 받기 시작하고 바로. <\n>을 입력 받으면 아무것도 입력받지 못 하고 입력이 종료된다.
여기서 주의해야할 상황은 nextLine()을 사용하기 전에 next()를 사용했을 경우이다.
next()는 공백이나 <\n>을 입력받기 전까지 입력을 받고, 뒤에있는 공백 또는 <\n>을 건들지 않고 그대로 종료되어 버퍼에는 여전히 공백과 <\n>이 남게 된다.
버퍼에 <\n>이 남은 상태에서 nextline()을 사용한다면 아무것도 입력하지 못하고 <\n>을 만나게 되어 바로 입력이 종료되고 말 것이다.
next()로 공백 전까지 필요한 문자열을 입력받고, 공백 뒤에있는 필요없는 입력을 버퍼에서 지워주면 된다.
next() 다음에 nextLine()으로 입력을 받고 아무런 행동을 하지 않아서 버퍼를 소모하고, 다음에 원하는대로 nextLine()을 사용하면 된다.
Scanner에는 다른 타입을 리턴하는 종류도 있다.
아래에 나오는 scanner들은 next()와 같은 규칙을 적용한다.
nextByte() // byte 형 입력 및 리턴
nextShort() // short 형 입력 및 리턴
nextInt() // int 형 입력 및 리턴
nextLong() // long 형 입력 및 리턴
nextFloat() // float 형 입력 및 리턴
nextDouble() // double 형 입력 및 리턴
nextBoolean() // boolean 형 입력 및 리턴