regex 将整数从String提取到Array中

tnkciper  于 2022-12-01  发布在  其他
关注(0)|答案(8)|浏览(115)

我需要将整数String中提取到数组中。
我已经得到了整数,但是我无法将它们放入数组中。

public static void main(String[] args) {
    String line = "First number 10, Second number 25, Third number 123";
    String numbersLine = line.replaceAll("[^0-9]+", "");
    int result = Integer.parseInt(numbersLine);

    // What I want to get:
    // array[0] = 10;
    // array[1] = 25;
    // array[2] = 123;
}
5jdjgkvh

5jdjgkvh1#

您可以使用正则表达式来撷取数字:

String s = "First number 10, Second number 25, Third number 123 ";
Matcher matcher = Pattern.compile("\\d+").matcher(s);

List<Integer> numbers = new ArrayList<>();
while (matcher.find()) {
    numbers.add(Integer.valueOf(matcher.group()));
}

\d+代表重复一次或多次的任何数字。
如果循环输出,将得到:

numbers.forEach(System.out::println);

// 10
// 25
// 123

注意:此解决方案仅适用于Integer,但这也是您的要求。

20jt8wwn

20jt8wwn2#

不要用空字符串替换字符,而是用空格替换。然后在其上拆分。

import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        String line = "First number 10, Second number 25, Third number 123 ";
        String numbersLine = line.replaceAll("[^0-9]+", " ");

        String[] strArray = numbersLine.split(" ");

        List<Integer> intArrayList = new ArrayList<>();

        for (String string : strArray) {
            if (!string.equals("")) {
                System.out.println(string);
                intArrayList.add(Integer.parseInt(string));
            }
        }

        // what I want to get:
        // int[0] array = 10;
        // int[1] array = 25;
        // int[2] array = 123;
    }
}
quhf5bfb

quhf5bfb3#

假设您有一个数字字符串,如“10,20,30”,您可以使用以下代码:

String numbers = "10, 20, 30";

String[] numArray = nums.split(", ");

ArrayList<Integer> integerList = new ArrayList<>();

for (int i = 0; i < x.length; i++) {
    integerList.add(Integer.parseInt(numArray[i]));
}
wvt8vs2t

wvt8vs2t4#

您可以尝试使用流API:

String input = "First number 10, Second number 25, Third number 123";

int[] anArray = Arrays.stream(input.split(",? "))
    .map(s -> {
        try {
            return Integer.valueOf(s);
        } catch (NumberFormatException ignored) {
            return null;
        }
    })
    .filter(Objects::nonNull)
    .mapToInt(x -> x)
    .toArray();

System.out.println(Arrays.toString(anArray));

并且输出是:
[10,25,123]
而regex.replaceAll版本将是:

int[] a = Arrays.stream(input.replaceAll("[^0-9]+", " ").split(" "))
    .filter(x -> !x.equals(""))
    .map(Integer::valueOf)
    .mapToInt(x -> x)
    .toArray();

其中输出相同。

jucafojl

jucafojl5#

使用非数字进行拆分,然后解析结果:

List<Integer> response = Arrays.stream(line.split("\\D+"))
        .filter(s -> !s.isBlank())
        .map(Integer::parseInt)
        .toList();
lf5gs5x2

lf5gs5x26#

使用模式\d+(即一个或多个数字)提取整数字符串,并使用Integer#parseInt将它们Map为整数。

int[] array = Pattern.compile("\\d+")
                     .matcher(line)
                     .results()
                     .map(MatchResult::group)
                     .mapToInt(Integer::parseInt)
                     .toArray();

演示

import java.util.Arrays;
import java.util.List;
import java.util.regex.MatchResult;
import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {

        String line = "First number 10, Second number 25, Third number 123";
        
        int[] array = Pattern.compile("\\d+")
                        .matcher(line)
                        .results()
                        .map(MatchResult::group)
                        .mapToInt(Integer::parseInt)
                        .toArray();

        System.out.println(Arrays.toString(array));

    }
}

输出

[10, 25, 123]
9w11ddsr

9w11ddsr7#

public static void main(String args[]) {

        String line = "First number 10, Second number 25, Third number 123 ";

        String[] aa=line.split(",");
        for(String a:aa)
        {
            String numbersLine = a.replaceAll("[^0-9]+", "");
            int result = Integer.parseInt(numbersLine);
            System.out.println(result);

        }

}
wkyowqbh

wkyowqbh8#

工作代码:

public static void main(String[] args) 
{
    String line = "First number 10, Second number 25, Third number 123 ";
    String[] strArray= line.split(",");
    int[] integerArray =new int[strArray.length];

    for(int i=0;i<strArray.length;i++)
        integerArray[i]=Integer.parseInt(strArray[i].replaceAll("[^0-9]", ""));
    for(int i=0;i<integerArray.length;i++)
        System.out.println(integerArray[i]);
        //10
        //15 
        //123
}

相关问题