【问题标题】:read() method of BufferedReader and InputStreamReaderBufferedReader 和 InputStreamReader 的 read() 方法
【发布时间】:2015-10-27 18:15:00
【问题描述】:

为什么在使用read() 方法而不是BufferedReaderreadLine() 将字符解析为整数时会出现异常。我尝试使用以下代码:

BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int a= Integer.parseInt(br.read());

错误是:无法将 int 转换为字符串.. 非常奇怪的错误

【问题讨论】:

  • 试试这个Integer.toString(integer) FYI stackoverflow.com/questions/8973381/…
  • 不,我不想将整数转换为字符串。这就是为什么我写了奇怪的错误..因为我想使用读取方法将字符转换为整数

标签: java


【解决方案1】:

Reader.read() 只返回一个字符 - 但作为 int,因此您可以判断是否已到达数据末尾。

现在没有任何Integer.parseInt(int) 方法,这就是调用失败的原因——甚至没有Integer.parseInt(char)。您可以转换为 char,然后调用 Character.getNumericValue(char)... 或者您可以使用:

int digit = br.read() - '0';

...然后检查 digit 是否在 0-9 范围内。

或者你可以从你读过的单个字符创建一个字符串并调用Integer.parseInt,但这似乎有点矫枉过正......

【讨论】:

  • 你能告诉我这个'0'在你的代码中基本上做了什么吗:(((int digit = br.read() - '0';))))
  • @Isha:这是减去数字 0 的 UTF-16 代码单元......基本上你得到的整数是输入中字符的 UTF-16 代码单元,你想要转换'0' 到整数 0,'1' 到整数 1 等等......因为 '0' 到 '9' 的代码单元是连续的,你可以减去 '0'。
【解决方案2】:

您需要在Integer.parseInt("need a String") 中解析String

但是你在这里提供intbr.read() 返回int

你可以使用

BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int a= br.read();

编辑:

是的,当您输入 5 时,br.read() 读取为 53,因为 '5' 的 unicode 值为 53。

所以你想处理int。你可以试试int a=Integer.parseInt(br.readLine());

【讨论】:

  • 我想解析 4 或 5 之类的数字或通过 read() 方法读取为字符的任何整数值
  • @Isha 是的。你可以试试这个方法。
  • 当您说“或任何整数值”时,您的意思是“任何一位数”,对吗?因为read() 只读取一个字符……你怎么会这样读取数字 1234?
  • @JonSkeet 是的,这里只讨论个位数。我已经尝试过你告诉我的方式,但在输出中没有。即将到来(我猜它的 ASCII 值)。为了。例如。如果我输入 5 ,那么当我打印该数字时,会出现其他数字。
  • @Isha:那么您没有按照我的答案(不是这个)做,因为我的答案是有效的。但是我们看不到你在做什么,因为你没有提供你尝试过的代码,这很难帮助你......
【解决方案3】:

Reader 及其子类包含int read() 方法,该方法将单个字符读取为int

它返回 int 而不是 char 的原因是因为它必须能够在到达流末尾时返回 -1(以及 char 提供的 65536 个字符)。

如果您想读取单个字符,您只需检查该值是否不是 -1,然后将其转换为 char。如果要将字符视为 int 值,则无需执行任何操作。

【讨论】:

    【解决方案4】:

    使用readLine() 函数。在这种情况下,值被读取为字符串。

     int a= Integer.parseInt(br.readLine());
    

    read() 方法以整数形式返回一个字符。parseInt() 需要一个字符串,但您给出的是一个整数。所以这里的代码int a= Integer.parseInt(br.read()) 尝试将int 转换为int。因此错误。

    【讨论】:

    • 是的,我知道我可以使用 readLine() 来做到这一点。但是为什么我们不能用 read() 来做这个问题
    猜你喜欢
    • 1970-01-01
    • 2012-08-25
    • 2015-02-24
    • 2011-11-14
    • 1970-01-01
    • 2018-05-01
    • 1970-01-01
    • 2022-08-10
    • 2015-11-17
    相关资源
    最近更新 更多