我有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]