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



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

您可以使用正则表达式\d+(意思是一个或多个数字的字符串(从给定字符串中获取匹配字符串,并使用Integer#parseInt将这些匹配字符串中的每个转换为int

演示:

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(即Stream<Integer>(映射为Stream<String>

演示:

import java.text.NumberFormat;
import java.util.Arrays;
import java.util.Locale;
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))";
final NumberFormat formatter = NumberFormat.getNumberInstance(Locale.US);
String[] formattedNumbers = Pattern.compile("\d+") // Pattern to match a string of one or more digits
.matcher(data)
.results()
.map(MatchResult::group)                    // Map the each MatchResult into a String
.mapToInt(Integer::parseInt)                // Map each String into an int
.boxed()
.map(number -> formatter.format(number))    // Format each int into a String using the formatter
.toArray(String[]::new);                    // Convert Stream into array
System.out.println(Arrays.toString(formattedNumbers));
}
}

输出:

[5,999,999, 1,000, 100, 1,000, 10,000, 2]

最新更新