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符号弄糊涂了。因为这应该是任意数字,但它不是识别负片。我找不到数字上可选负片的符号。