如何从字符串的未知索引中提取两个整数



非常简单的问题-我有一个看起来像PR:MTH 1 MTR 7的字符串。我想把那个字符串中的数字提取成整数变量。

问题是我不知道这些整数有多少位数。例如CCD_ 2也是有效的字符串。所以我不能指定数字所在的确切索引。

我们所能确定的是,第一个数字的MSB在索引7(我数过了)。

java中是否有一些String方法或StringBuilder方法可以做到这一点?还是我需要自己写一本?

String#split在这种情况下是您的朋友

用空格和冒号拆分字符串,并解析相应的索引。

String s = "PR:MTH 100000 MTR 777";
String[] split = s.split("[ :]");
int one = Integer.parseInt(split[2]);
int two = Integer.parseInt(split[4]);

您应该尝试split("),然后取所需的值并转换为整数

您可以执行yourString.split(" ");并使用try-catch块迭代该数组以搜索所有数字。为了保存它们,您可以使用ArrayList<Integer>

我会做一些类似的事情:

    String myString = "dsfsd 12 12 dd";
    ArrayList<Integer> numbers = new ArrayList<>();
    String[] splitString = myString.split(" ");
    for (String split : splitString) {
        try {
            numbers.add(Integer.valueOf(split));
        } catch (java.lang.NumberFormatException e) {
            //not a number
        }
    }
    System.out.printf("I have %d numbers in my String! n", numbers.size());

为了获得数字,您只需要迭代ArrayList

    for (Integer number : numbers) {
        //your code
        System.out.println(number);
    }

希望这对你有帮助!

要解决一般情况,请使用正则表达式查找数字:

String number1 = str.replaceAll("\D*(\d+).*", "$1");
String number2 = str.replaceAll("\D*\d+\D+(\d+).*", "$1");

这具有处理没有明确分隔符的输入的优势,例如,如果输入字符串是

foo123bar456baz

上述代码将成功地提取CCD_ 7和CCD_。

最新更新