获取字符串“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”结尾,然后解析没有最后两个字符的子字符串。
- Netduans中的Arduino(处理)库和控制
- 如何修复:类文件中的未知常量标记32 com / sun / org / apache / xerces / internal / impl / xs / XMLSchemaValidator
- 如何为JFileChooser添加本地化,以获取默认情况下不支持的语言环境?
- 我把这个代码直接从’Java all in one for Dummies’中取出来……为什么它不起作用?
- 由于Bean Validation API而无法启动Hibernate Validator
- Java 8中的reduce累加器是否允许修改其参数?
- 简单的Java到XML示例
- 如何使用Tensorflow 1.0 Java API创建/初始化变量
- int 数组(从最低到最高排序)