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中运行得很好