如何将包含单词中间数字的字符串拆分为java中的字符串lisit和int lisit?

时间:2020-11-05 08:39:19

标签: java android string split numbers

我有String data="5999999-log(1000)*100/1000-cbrt(log(10000^2))"。我想将数据字符串拆分为int列表Int[] numbers = {5999999,1000,100,1000,10000,2},以便可以将逗号分隔符添加到int列表中的ever数字,例如5,999,999到int的每个数字列表,我不希望像String[] s = {"-log(",")*","/","-cbrt(log(","^","))"}这样的字符串,并且数据字符串是可编辑的,用户可以在其中编写表达式来求解,这样我就可以在运行时向每个数字组添加逗号。可能吗?我在Google计算器中看到的位置

1 个答案:

答案 0 :(得分:0)

您可以使用正则表达式\\d+(表示一个或多个数字的字符串)从给定的字符串中获取匹配的字符串,并使用{{将这些匹配的字符串中的每一个转换为int 1}}。

演示:

Integer#parseInt

输出:

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

public class Main {
    public static void main(String[] args) {
        String data = "5999999-log(1000)*100/1000-cbrt(log(10000^2))";
        int[] numbers = Pattern.compile("\\d+")      // Pattern to match a string of one or more digits
                        .matcher(data)
                        .results()
                        .map(MatchResult::group)     // Map the MatchResult into String
                        .mapToInt(Integer::parseInt) // Map the String into int
                        .toArray();
        System.out.println(Arrays.toString(numbers));
    }
}

如果您要按照某种数字格式将每个[5999999, 1000, 100, 1000, 10000, 2] 格式化为int,则可以将装箱的String(即IntStream)映射到{{1} }格式。

演示:

Stream<Integer>

输出:

Stream<String>