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

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

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

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

谢谢!

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

 mystr.split("[az]")[0] 

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

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

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

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

 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","")); 

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

您可以使用

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

注意:

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


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

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

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