0

让我们假设我有一个这样的字符串:

类:类shapes_assignment.SquareX-坐标:314Y-坐标:50

如何从中提取两个数字(即 314 和 50)?

4

4 回答 4

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()));  
}
于 2012-11-16T17:23:34.580 回答
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
于 2012-11-16T17:27:56.830 回答
0

遍历字符串的每个字符。如果字符匹配 0 - 9,则将其添加到新字符串 foo。当字符不是连续顺序的数字时,停止向该字符串添加字符。

完成后,将字符串 foo 转换为整数。

我希望这有帮助。

于 2012-11-16T17:23:41.490 回答
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);
        }
    }
}
于 2012-11-16T17:25:54.323 回答