如何解析包含“+”符号的字符串

6

我有一个包含数字的字符串。

我有下面这段代码:

    String tempStr = "+123";
    NumberFormat numformat = NumberFormat.getNumberInstance();
    numformat.setParseIntegerOnly(true);
    try {
        int ageInDays = Integer.parseInt(tempStr);
        System.out.println("the age in days "+ageInDays);
    } catch (NumberFormatException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

对于带有负号的数字,它可以正常工作。但是,我无法处理带有“+”符号的数字。它会抛出NumberFormatException。

那么,我该如何从字符串中解析带有“+”符号的数字呢?


5
自Java 7起,你可以使用Integer.parseInt("+123")。我也测试了你的代码,并且在使用Java 8时也有效。如果需要更多细节信息,请查看这个问题和答案 - MadProgrammer
2
技术上,-123 是一个数字,但 +123 不是一个数字。123 是正数。 - Srihari
2个回答

4
如果您使用的是Java 7或更高版本,我建议使用java.lang.Long;或java.lang.Integer;(如果您确定需要解析整数)。
这对两种情况都适用。
后续编辑: 我没有看到您正在使用Integer.parseInt();
因此,我假设您使用的是Java 6或更低版本。
在这种情况下,请尝试在带有Integer.parseInt(tempStr);的行之前调用以下方法,以删除+(如果存在):
private static String removePlusSignIfExists(String numberAsString) {
    if(numberAsString == null || numberAsString.length() == 0){
        return numberAsString;
    }

    if(numberAsString.charAt(0) == '+'){
        return numberAsString.substring(1, numberAsString.length());
    } else {
        return numberAsString;
    }
}

1
你尝试过在Java 6中使用吗?并不是所有人都能使用最新和最好的东西... - MadProgrammer
我必须承认,我在Java 7和8中尝试过它。我已经超过一年没有Java 6 SDK了。 - Flowryn
根据文档,Long.parseLong 只能在版本7及以上才能使用。因此,在这种情况下它并没有什么帮助,因为 Integer.parseInt 从v.7开始同样适用。 - sstan
感谢您的建议,我会根据它重新编辑我的帖子。 - Flowryn
@MattBall 我添加了一个适用于Java6或更低版本的解决方案。在我的情况下,我没有使用它,因为我没有需要严格要求使用它的项目。 - Flowryn
显示剩余3条评论

2

这个函数主要是将"+"替换为""(空字符串),所以"+12+3"会返回123

public int parseInt(String text) {
    return Integer.parseInt(text.replaceAll("+", ""));
}

这是一个使用示例:

如何使用此功能的示例:

System.out.println(parseInt("+123")); //Returns 123

我希望这能有所帮助!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接