一尘不染

将带有文本的String []转换为double []

java

我有一个要转换为double []数组的Arraylist。我首先将Arraylist转换为String []。然后,我尝试将String
[]转换为double [],但在此过程中失败。这是问题所在:字符串包含一些文本以及一些带小数的数字。我只想将数字和小数转换为double
[]数组,然后简单地删除文本。但是,我只知道如何使用字符串而不是String []删除文本。请看一下:

import java.util.ArrayList;
import java.util.List;
import jsc.independentsamples.SmirnovTest;

public class example {
    public static void main(String[] arg) throws Exception {
        ArrayList<String> list1 = new ArrayList<String>();
        ArrayList<String> list2 = new ArrayList<String>();

        list1.add("RSP0001,1.11,1.22");
        list1.add("RSP0002,2.11,2.22");
        list1.add("RSP0003,3.11,3.22");
        list1.add("RSP0004,4.11,4.22");

        String[] str1 = new String[list1.size()];
        str1 = list1.toArray(str1);
        str1.replaceAll("RSP_\\d+","");
        double array1 = Double.parseDouble(str1);

        System.out.println(array1);
    }
}

由此产生两个错误:第一个错误是str1.replaceAll处的“找不到符号”错误。第二个是“ Double.parseDouble”处的“ method
parseDouble”错误。那里的问题是我需要一个String而不是String []。

关于如何将String []转换为double []的任何想法?

谢谢,

j


阅读 215

收藏
2020-12-03

共1个答案

一尘不染

您需要在“,”上拆分list1中的每个String,然后尝试解析每个被拆分的String:

    ArrayList<Double[]> results = Lists.newArrayList();
    for( String s : list1 ) {
        String[] splitStrings = s.split(",");
        Double[] doublesForCurrentString = new Double[splitStrings.length];
        for(int i=0; i<splitStrings.length; i++){
            try {
                doublesForCurrentString[i] = Double.valueOf(splitStrings[i]);
            } catch( NumberFormatException ex ) {
                // No action.
            }
        }
        results.add(doublesForCurrentString);
    }
    Double[][] doubleArray = (Double[][])results.toArray();

关键点:

  • 编辑 :正如@Tim Herold所指出的,在性能方面,您可能会更好,避免尝试解析您知道的非数字内容。在这种情况下,我仍然会先进行拆分,然后再放入代码中,以防止您尝试在每行的第一个拆分String上解析parseDouble(),而不是尝试在拆分之前进行String替换;这样会更快(并且如果我们不关心性能,那么try / catch非常好并且可读性更好)。 原文 :当您尝试分析双打时,如果有任何无效输入,则需要try / catch。奖励:您现在不需要删除非数字文本,只需让此try / catch处理即可。
  • 您的琴弦各有 两个 双打。您将不能只在开头删除文本,然后解析其余文本,因为这将不是有效的double。
  • ArrayList通常更易于使用;我会选择返回ArrayList<Double>(或ArrayList<ArrayList<Double>>)以上Double[]Double[][]每周的任何一天。当然,在某些情况下,我会做一些不同的事情,但是您的情况在我看来并不像其中之一。
2020-12-03