我有一个像这样的字符串,如下所示。从下面的字符串我需要提取数字123
,它可以在任何位置,如下所示,但字符串中只有一个数字,它将始终采用相同的格式_number_
text_data_123
text_data_123_abc_count
text_data_123_abc_pqr_count
text_tery_qwer_data_123
text_tery_qwer_data_123_count
text_tery_qwer_data_123_abc_pqr_count
以下是代码:
String value = "text_data_123_abc_count";
// this below code will not work as index 2 is not a number in some of the above example
int textId = Integer.parseInt(value.split("_")[2]);
这样做的最佳方式是什么?
答案 0 :(得分:1)
\\d+
这个带find
的正则表达式应该为你做。
答案 1 :(得分:1)
使用正向前瞻断言。
Matcher m = Pattern.compile("(?<=_)\\d+(?=_)").matcher(s);
while(m.find())
{
System.out.println(m.group());
}
答案 2 :(得分:1)
有一点guava魔法:
String value = "text_data_123_abc_count";
Integer id = Ints.tryParse(CharMatcher.inRange('0', '9').retainFrom(value)
答案 3 :(得分:1)
您可以使用replaceAll
删除所有非数字,只留一个数字(因为您说输入字符串中只有1个数字):
String s = "text_data_123_abc_count".replaceAll("[^0-9]", "");
请参阅IDEONE demo
您可以使用[^0-9]
(也就是非数字)代替\D
:
String s = "text_data_123_abc_count".replaceAll("\\D", "");
鉴于当前的要求和限制,replaceAll
解决方案似乎最方便(无需直接使用Matcher
)。
答案 4 :(得分:0)
你可以从该字符串中获取所有部分并与其大写进行比较,如果相等则可以将其解析为数字并保存:
public class Main {
public static void main(String[] args) {
String txt = "text_tery_qwer_data_123_abc_pqr_count";
String[] words = txt.split("_");
int num = 0;
for (String t : words) {
if(t == t.toUpperCase())
num = Integer.parseInt(t);
}
System.out.println(num);
}
}