我们假设我有一个这样的字符串:
类:class shapes_assignment.SquareX-Coordinate:314Y-Coordinate:50
如何从中提取两个数字(即314和50)?
答案 0 :(得分:6)
使用正则表达式:
String s = "Class:class shapes_assignment.SquareX-Coordinate:314Y-Coordinate:50";
Pattern pat = Pattern.compile("(\\d)+");
Matcher mat = pat.matcher(s);
while(mat.find()){
System.out.println(mat.group()); // You can store these numbers in variables
}
您可以使用以下代码转换和存储数字:
ArrayList<Integer> numbers = new ArrayList<Integer>();
while(mat.find()){
System.out.println(mat.group());
numbers.add(Integer.parseInt(mat.group()));
}
答案 1 :(得分:1)
您可以使用Matcher.matches()
:
String str = "Class:class shapes_assignment.SquareX-Coordinate:314Y-Coordinate:50";
Matcher m = Pattern.compile(".*?(\\d+).*?(\\d+).*").matcher(str);
if (m.matches()) {
System.out.println(m.group(1));
System.out.println(m.group(2));
}
输出:
314
50
答案 2 :(得分:0)
迭代字符串的每个字符。如果字符匹配0 - 9,则将其添加到新字符串foo。当字符不是连续顺序的数字时,停止向此字符串添加字符。
完成此操作后,将字符串foo转换为整数。
我希望这会有所帮助。
答案 3 :(得分:0)
您可以将字符串拆分为非数字字符:
String s = "Class:class shapes_assignment.SquareX-Coordinate:314Y-Coordinate:50";
String[] numbers = s.split("[^\\d]+");
请注意,如果输入以非数字字符开头,则第一个元素将为空字符串。
然后,您可以使用Integer.parseInt()
解析数组的每个非空字符串。
完整的工作代码:
public static void main(String[] args) {
String s = "Class:class shapes_assignment.SquareX-Coordinate:314Y-Coordinate:50";
String[] numbers = s.split("[^\\d]+");
for (String number : numbers) {
if (!number.isEmpty()) {
int i = Integer.parseInt(number);
System.out.println("i = " + i);
}
}
}