Java 将字符串转换为多维数组
我有一个字符串:Java 将字符串转换为多维数组,java,string,multidimensional-array,Java,String,Multidimensional Array,我有一个字符串: String stringProfile = "0, 4.28 10, 4.93 20, 3.75"; 我试图将其转换为如下所示的数组: double [][] values = {{FastMath.toRadians(0), FastMath.toRadians(4.28)}, {FastMath.toRadians(10), FastMath.toRadians(4.93)}, {F
String stringProfile = "0, 4.28 10, 4.93 20, 3.75";
我试图将其转换为如下所示的数组:
double [][] values = {{FastMath.toRadians(0), FastMath.toRadians(4.28)},
{FastMath.toRadians(10), FastMath.toRadians(4.93)},
{FastMath.toRadians(20), FastMath.toRadians(3.75)}};
其中,FastMath.toRadians
是每个元素上的一个方法
发行数量:
第一件合乎逻辑的事情是拆分字符串:
List<String> stringProfileList= Arrays.asList(stringProfile.split(" "));
List-stringProfileList=Arrays.asList(stringProfile.split(“”);
输出将是“0,4.28,10,4.93,20,3.75”
,因此现在每个元素都被一个“,”分割,而不是每隔一个
然后,对于列表中的每2个元素,我需要分配给一个数组。
在每个数组中,我对每个元素应用FastMath.toRadians(),然后将每个数组附加到一个更大的多维数组中
这样做对吗?我在实现每2个元素时都会遇到困难
我还需要将这些字符串元素转换为一个double,这似乎并不简单。如果正确,请首先将字符串拆分为一个子字符串列表,然后对该列表进行foreach,并将FastMath torad结果添加到新的结果列表中:
List<String> list = new ArrayList<String>();
List<Double> results = new ArrayList<Double>();
for (String string : list) {
results.add(FastMath.toRadians(Double.valueOf(string)));
}
results.toArray();
List List=new ArrayList();
列表结果=新建ArrayList();
用于(字符串:列表){
结果.add(FastMath.toRadians(Double.valueOf(string));
}
结果:toArray();
接下来要做的是将数组拆分为您选择的新多维数组,方法是迭代该数组并将其排序到多维数组中
但是,如果您不必使用数组,我会使用更高的数据类型,如映射或列表、元组或更适合您需要的东西。只需查看java collections为您提供的内容。您是正确的,首先将字符串拆分为子字符串列表,然后对该列表执行foreach操作,并将FastMath torad结果添加到新的结果列表中:
List<String> list = new ArrayList<String>();
List<Double> results = new ArrayList<Double>();
for (String string : list) {
results.add(FastMath.toRadians(Double.valueOf(string)));
}
results.toArray();
List List=new ArrayList();
列表结果=新建ArrayList();
用于(字符串:列表){
结果.add(FastMath.toRadians(Double.valueOf(string));
}
结果:toArray();
接下来要做的是将数组拆分为您选择的新多维数组,方法是迭代该数组并将其排序到多维数组中
但是,如果您不必使用数组,我会使用更高的数据类型,如映射或列表、元组或更适合您需要的东西。只需查看java collections为您提供的功能。如果您想使用
流
试试以下方法:
Pattern PAIR = Pattern.compile("(?<=\\d)\\s(?=\\d)");
double[][] result = PAIR.splitAsStream(stringProfile)
.map(pair -> pair.split(","))
.map(pair -> new double[] { FastMath.toRadians(Double.valueOf(pair[0])), FastMath.toRadians(Double.valueOf(pair[1])) })
.toArray(i -> new double[i][]);
如果我们想重用双数组,我们可以这样做:
.map(pair -> {
pair[0] = FastMath.toRadians(pair[0]);
pair[1] = FastMath.toRadians(pair[1]);
return pair;
})
最后一步将双数组收集到二维数组中
编辑: 看一看
使用类文档的措辞,使用的模式会查找前面的空白字符(
\\s
)((?),如果要使用流
,请尝试以下操作:
Pattern PAIR = Pattern.compile("(?<=\\d)\\s(?=\\d)");
double[][] result = PAIR.splitAsStream(stringProfile)
.map(pair -> pair.split(","))
.map(pair -> new double[] { FastMath.toRadians(Double.valueOf(pair[0])), FastMath.toRadians(Double.valueOf(pair[1])) })
.toArray(i -> new double[i][]);
如果我们想重用双数组,我们可以这样做:
.map(pair -> {
pair[0] = FastMath.toRadians(pair[0]);
pair[1] = FastMath.toRadians(pair[1]);
return pair;
})
最后一步将双数组收集到二维数组中
编辑:
看一看
使用类文档的措辞,所使用的模式会查找前面的空白字符(\\s
)((?如果在空格上拆分,而不是在逗号前面拆分,则会得到逗号分隔的对。然后可以再次拆分这些字符并映射到双[]
您可以在以后添加任何进一步的处理
private void test() {
String s = "0, 4.28 10, 4.93 20, 3.75";
// Split on space without comma beforehand.
Double[][] doubles = Arrays.stream(s.split("(?<!,) "))
// Then split each pair.
.map(pairString -> pairString.split(", "))
// Make each pair into a Double[]
.map(pair -> new Double[]{Double.valueOf(pair[0]), Double.valueOf(pair[1])})
// to array of Double[][]
.toArray(Double[][]::new);
System.out.println(Arrays.deepToString(doubles));
}
private void test(){
字符串s=“0,4.2810,4.9320,3.75”;
//在不使用逗号的情况下在空格上拆分。
Double[]doubles=Arrays.stream(s.split)((?如果在前面有逗号的空格上拆分,则会得到逗号分隔的对。然后可以再次拆分这些对并映射到Double[]
您可以在以后添加任何进一步的处理
private void test() {
String s = "0, 4.28 10, 4.93 20, 3.75";
// Split on space without comma beforehand.
Double[][] doubles = Arrays.stream(s.split("(?<!,) "))
// Then split each pair.
.map(pairString -> pairString.split(", "))
// Make each pair into a Double[]
.map(pair -> new Double[]{Double.valueOf(pair[0]), Double.valueOf(pair[1])})
// to array of Double[][]
.toArray(Double[][]::new);
System.out.println(Arrays.deepToString(doubles));
}
private void test(){
字符串s=“0,4.2810,4.9320,3.75”;
//在不使用逗号的情况下在空格上拆分。
Double[]doubles=Arrays.stream(s.split(“(?可惜你删除了那个答案,正在研究一些建议……既然你删除了它,就别急着下一步time@Eugene别担心。在阅读了规范之后,我还没有说服自己。也许我会想出一个更好的解决方案。我真的很喜欢这个解决方案。我对正则表达式的语法感到困惑。你能把它的工作原理分解一下吗eers@arsenal88我已经更新了我的答案。谢谢,谢谢。我被\\d符号弄糊涂了。因为这应该是任何数字,但它不能识别负片。我找不到数字上可选负片的符号。遗憾的是,你删除了这个答案,正在研究一些建议……既然你删除了它,不要急于下一步time@Eugene别担心,我会的在阅读了规范后,我自己并不确信。也许我会想出一个更好的解决方案。我真的很喜欢这个解决方案。我被正则表达式的语法弄糊涂了。你能把它的工作原理分解一下吗?Cheers@arsenal88我已经更新了我的答案。谢谢,谢谢。我被\\d符号弄糊涂了。因为这应该是任意数字,但它不是识别负片。我找不到数字上可选负片的符号。