我有一个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
答案 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();
关键点:
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)
我会这样做:
那么这段代码
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);
}
}