2013-08-28 30 views
1

这是我用来简化使用BufferedReader获取输入的方法,我的输入是“10 12 \ n”其余代码使用此函数的返回值Integer.parseInt(//return value)并且能够使用值“10”来执行此操作,但它会得到一个NumberFormatException和12,因为包含换行符。BufferedReader包含换行符,不能将字符串解析为数字

我不明白如何在append()之前明确提出if-陈述时包含它。

private static String getInput(BufferedReader br) { 
    StringBuilder sb = new StringBuilder(); 
    char x = 0; 
    try { 
     x = (char) br.read(); 
    } catch (IOException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 
    while (x != ' ' && x != '\n' && x != -1) { 
     if (x != ' ' && x != '\n' && x != -1) 
      sb.append(x); 
     try { 
      x = (char) br.read(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
    return (sb.length() == 0) ? null : sb.toString(); 
} 
+1

是否存在字符“反斜杠”和“n”('\\\'和'n'),使它看起来像换行符'\ n'? – rgettman

+0

@rgettman没有它的绝对'\ n'原因当我修剪的字符串,没有错误,'\ n'不可见 – latenightcode

回答

0

将它全部读入字符串,然后调用trim(),然后解析字符串。

或者,您可以使用Character.isLetterOrDigit(x)验证您的输入char x

+0

谢谢!它现在不会收到错误,但是为什么当我特别提出一个条件语句不包含它时,它包含'\ n'? – latenightcode

+0

我不知道。你确定它是你收到的'\ n',那是不能评估的?你可以尝试'Character.isLetterOrDigit(x)'。 – JoshDM

0

为什么不使用Scanner?它为你处理空白,甚至可以包装Reader

Scanner scanner = new Scanner(br); 

while(scanner.hasNextInt()){ 
    int myInt = scanner.nextInt(); 
} 
//should probably put close in a finally block 
scanner.close(); 
+0

哦,因为我解决UVA问题,扫描仪放慢速度,这将导致它不被法官接受 – latenightcode

相关问题