Java中的Integer.parseint,首先是’+’时的exception

Integer.parseInt("-1000"); 返回-1000作为输出。

Integer.parseInt("+500"); 抛出一个例外。

如何在不必修剪符号的情况下使用“+”符号识别正数?

尝试使用DecimalFormat模式"+#;-#" 。 它将处理显式签名解析。 模式细分:

  • 第一部分(之前; )是正模式,它必须以+ char开头
  • 第二部分是否定的,必须以- char开头

例:

 DecimalFormat df = new DecimalFormat("+#;-#"); System.out.println(df.parse("+500")); System.out.println(df.parse("-500")); 

输出:

 500 -500 

一种选择是使用Java 7 …假设行为符合记录 :

将字符串参数解析为带符号的十进制整数。 字符串中的字符必须都是十进制数字,除了第一个字符可以是ASCII减号’ – ‘(’\ u002D’)表示负值或ASCII加号’+’(’\ u002B’)表示正值。

看起来这是Java 7中引入的新function。 JDK 6文档仅表明-已处理。

该方法的行为与文档中描述的相同:

字符串中的字符必须全部为十进制数字,除了第一个字符可以是ASCII减号’ – ‘(’\ u002D’)以指示负值。

如果是+ ,则需要跳过第一个字符才能正确解析:

 if (s.charAt(0) == '+') s = s.substring(1); int val= Integer.parseInt(s); 

我使用的是Java 7和Integer.parseInt("+500"); 没有抛出任何exception。

字符串中的字符必须都是十进制数字,除了第一个字符可以是ASCII减号'-''\u002D' )表示负值或ASCII加号'+''\u002B' )表示正值。

Integer.parseInt(String)的Java 7文档

public static int parseInt(String s)抛出NumberFormatException

将字符串参数解析为带符号的十进制整数。 字符串中的字符必须全部为十进制数字,除了第一个字符可以是ASCII减号’ – ‘(’\ u002D’)以指示负值。 返回结果整数值,就像将参数和基数10作为parseInt(java.lang.String,int)方法的参数给出一样。

的Javadoc

实现已经从java 6改为7. Intger.parseInt(“+ 500”)用于Exception直到java 6,但是在java 7中运行得很好