获取字符串“600sp”的整数部分的最佳方法是什么?

时间:2010-08-24 00:38:10

标签: java string integer type-conversion

我有一个字符串,说“600sp”,我希望从中得到整数部分(600)。

如果我Integer.valueOf("600sp"),由于字符串中遇到的非数字值“s”,我得到一个异常。

获取整数部分最快最干净的方法是什么?

谢谢!

6 个答案:

答案 0 :(得分:15)

如果你的字符串格式总是数字后跟一些字符,那么试试这个

mystr.split("[a-z]")[0]

答案 1 :(得分:7)

根据您输入的限制,您最好使用正则表达式。

    Pattern p = Pattern.compile("(\\d+)");
    Matcher m = p.matcher("600sp");
    Integer j = null;
    if (m.find()) {
        j = Integer.valueOf(m.group(1));
    }

这个正则表达式转换为'在字符串的开头给我一组连续的数字,其中至少有一个数字'。如果您有其他约束,例如解析实数而不是整数,那么您需要修改代码。

答案 2 :(得分:3)

对于更短且不太具体的解决方案,请添加更多上下文。

StringBuffer numbers = new StringBuffer();
for(char c : "asdf600sp".toCharArray())
{
  if(Character.isDigit(c)) numbers.append(c);
}

System.out.println(numbers.toString());

根据新信息,改进了解决方案:

Integer.valueOf("600sp".replace("sp",""));

答案 3 :(得分:2)

您可以使用

Integer.valueOf("0" + "600sp".replaceAll("(\\d*).*", "$1"))

注意:

使用此正则表达式,您将只保留初始数字。


编辑: 当我没有数字时,"0" +用于不崩溃。 Tks @jherico!

答案 4 :(得分:2)

我知道这已经得到了解答,但你考虑过java.util.Scanner了吗?如果没有正则表达式或其他更复杂的字符串实用程序,它似乎完全适合该法案。

答案 5 :(得分:1)

如果保证字符串(如你所说)是一个整数后跟“sp”,我建议不要使用更通用的正则表达式解析器,它也会接受其他变体(应该被拒绝为错误) )。

只测试它是否以“sp”结尾,然后解析没有最后两个字符的子字符串。