我希望格式为'%s_%d.y'的字符串。例如,“aabsa_124.y”或“x_5.y”。
我正在使用以下代码提取字符串的数字部分,是否有任何建议可以更清晰地提取数字?
String suffix = input.split("_")[1];
String numeric = suffix.split("\\.")[0];
int number = Integer.parseInt(numeric)
答案 0 :(得分:1)
您还可以使用RegExp更好地捕获您要查找的号码。这里的regExp使用正向前瞻(?=)和后瞻(?< =)。如果您不想要前瞻/后观逻辑,也可以使用简单组。
String input = "aabsa_124.y";
Pattern p = Pattern.compile("(?<=\\_)\\d+(?=\\.\\w+)");
Matcher m = p.matcher(input);
if (m.find()) {
int number = Integer.parseInt(m.group());
System.out.println(number);//124
}
这也会匹配“str_str_2.y”之类的字符串。
答案 1 :(得分:0)
这样的事情可能是:
String s = "aabsa_124.y";
int number = Integer.parseInt(s.replaceAll("[^\\d]", ""));
答案 2 :(得分:0)
你可以将所有非degit替换为空,然后你可以解析你的int:
int number = Integer.parseInt(input.replaceAll( "[^\\d]", ""));
如果您的String包含许多整数,并且您想要提取此整数,则可以使用模式,例如:
String input = "aabsa_124_155.y";
Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher(input);
while (m.find()) {
System.out.println(m.group());
}
<强>输出强>
124
155
答案 3 :(得分:0)
重要的是使用良好的名称和单元测试在自己的方法中抽象解析逻辑。这将使你的代码干净。
就个人而言,我会使用正则表达式。
您的实现适用于您描述的输入,但它不适用于“str_str_2.y”或“str_2.34.y”等示例。
在使用一些棘手的内衬之前记住这一点:
任何傻瓜都可以编写计算机可以理解的代码。好 程序员编写人类可以理解的代码。
Martin Fowler,2008年。