我有一个字符串,说“600sp”,我希望从中得到整数部分(600)。
如果我Integer.valueOf("600sp")
,由于字符串中遇到的非数字值“s”,我得到一个异常。
获取整数部分最快最干净的方法是什么?
谢谢!
答案 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”结尾,然后解析没有最后两个字符的子字符串。