将String []与文本转换为double []

时间:2013-08-08 20:01:14

标签: java arrays string arraylist double

我有一个Arraylist,我想转换为double []数组。我首先将Arraylist转换为String []。然后我尝试将String []转换为double [],但在此过程中失败。这是问题:字符串包含一些文本,以及一些带小数的数字。我想只将数字和小数转换为double []数组,只需删除文本。但是,我只知道如何使用String而不是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”中的“方法parseDouble”错误。问题是我需要一个String而不是String []。

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

谢谢,

KJM

5 个答案:

答案 0 :(得分:2)

您需要将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指出的那样,你可能会更好地避免尝试解析你知道非数字内容的性能。在这种情况下,我仍然首先拆分,然后只是放入代码,阻止您尝试在每行的第一个拆分字符串上尝试parseDouble(),而不是在拆分之前尝试进行字符串替换;这将更快(如果我们不关心性能,那么try / catch非常精细且更具可读性)。 ORIGINAL :当您尝试解析双打时,需要try / catch,以防有任何无效输入。额外奖励:你现在不需要删除非数字文本,你可以让这个try / catch来处理它。
  • 您的字符串中每个字符串都有两个双倍字符。你不可能只是在开头剥离文本然后解析其余的文本,因为它不会是一个有效的双重文本。
  • ArrayLists通常更容易使用;我选择在一周的任何一天返回ArrayList<Double>(或ArrayList<ArrayList<Double>>Double[]Double[][]。在某种情况下我会采取不同的做法,但你的听起来并不像我这样做。

答案 1 :(得分:1)

循环遍历数组:

foreach String[]
    double[counter] = parseToDouble(String[counter])

修改
爪哇:

   String[] str1 = list1.toArray(str1);
   double[] dou1 = new double[str1.length]
   for(int counter = 0; counter < str1.length;counter++)
      dou1[counter] = Double.parseDouble(str1[counter].replaceAll("RSP_\\d+",""));

答案 2 :(得分:0)

使用此

 String[] str1 = new String[list1.size()];
 str1 = list1.toArray(str1);
 double[] doubleArray = new double[str1.length]
 int i=0;
 for(String s:str1){
    doubleArray[i] = Double.valueOf(s.trim());
    i++;
 }

答案 3 :(得分:0)

这将完成工作。

double[] doubles = new double[array1.length];
for(int i=0; i<array1.length; i++){
   doubles[i] = Double.valueOf(array1[i])
} 

感谢SmartLemon进行编辑,您也可以这样做,而不是使用String[]

double[] doubles = new double[list1.size()];
for(int i=0; i<list1.size(); i++){
   doubles[i] = Double.valueOf(list1.get(i).replace("RSP_\\d+",""));
}

编辑:是的,你需要一个分隔符:

double[] doubles = new double[array1.length*2]; //multiply by 2 because you really have 8 numbers not 4
String [] array2 = null;

for(String string: array1) { 
    array2 = string.split(",");
    for(int i=0; i<array2.length; i++){
        doubles[i] = Double.valueOf(array2[i]);
    }
}

这应该是肯定的。

答案 4 :(得分:-1)

我会这样做:

  • make array
  • 转换为字符串

那么这段代码

for (String s: list1) {
    boolean obtained = false;
    double tempD;

    try {
        tempD = Double.parseDouble(s); 
        obtained = true;
    } catch (Exception e) {
        e.printStackTrace();
    }

    if (obtained) {
        list2.add(tempD);
    }
}