我使用readLine()
BufferedReader
创建了一个简单的Java应用程序。代码如下:
import java.io.*;
class demo_data
{
public static void main(String hh[])throws Exception
{
char c=' ';
int i=0;
String name="";
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Enter char:");
c=(char)br.read();
System.out.print("Enter String:");
name=br.readLine();
System.out.print("Enter value:");
i=Integer.parseInt(br.readLine());
System.out.print("\tChar:"+c+"\tName:"+name+"\tValue:"+i);
}
}
我的问题是,在读取字符值后,跳过字符串语句,我无法读取变量名的值。如果我读取char
值,然后尝试读取int
值,则会抛出NumberFormatException
。为什么呢?
答案 0 :(得分:1)
BufferedReader#read()
,从您的输入中读取单个字符。它不会在输入结尾处读取linefeed
。
因此,您的换行符作为br.readLine
之后的br.read
的输入。现在,如果您为string
输入2nd br.readLine
,它实际上是第3个。因此,例外。
因此,您的name
变量将包含linefeed - \n
,并且您为name
传递的字符串会转到int i
。
解决方法: -
尝试在br.readLine
之后添加一个空的br.read()
来消耗剩余的linfeed: -
c=(char)br.read();
br.readLine(); // Add an empty `br.readLine here.
System.out.print("Enter String:");
name=br.readLine();
或者,您也可以使用下面的@Peter's answer
答案 1 :(得分:0)
对readLine()
的调用会立即返回,因为在您输入第一个newLine
后仍会在缓冲区中的char
。
添加额外br.readLine()
来解决此问题:
System.out.print("Enter char:");
c=(char)br.read();
br.readLine();
System.out.print("Enter String:");
name=br.readLine();
答案 2 :(得分:0)
读取char c=(char)br.read();
后,您必须读取额外的行,因为它读取单个字符。
System.out.print("Enter char:");
c=(char)br.read();
br.readLine();
System.out.print("Enter String:");
name=br.readLine();
System.out.print("Enter value:");
i=Integer.parseInt(br.readLine());
System.out.print("\tChar:"+c+"\tName:"+name+"\tValue:"+i);
答案 3 :(得分:0)
在每种情况下,你实际上是在一次读一行而不只是一个字符和一个数字。
System.out.print("Enter char:");
char c = br.readLine().charAt(0);
System.out.print("Enter String:");
String name = br.readLine();
System.out.print("Enter value:");
int i = Integer.parseInt(br.readLine());