java:在多个ArrayList中保存字符串的部分
我有一个不同值的字符串,用“;”分隔,没有空格。如何保存第一个值,直到“;”进入ArrayList part1,第二个值进入下一个ArrayList,依此类推java:在多个ArrayList中保存字符串的部分,java,string,arraylist,Java,String,Arraylist,我有一个不同值的字符串,用“;”分隔,没有空格。如何保存第一个值,直到“;”进入ArrayList part1,第二个值进入下一个ArrayList,依此类推 String line = "10,23;190,33;86,423;132,45"; ArrayList<Double> part1 = new ArrayList<>(); ArrayList<Double> part2 = new ArrayList<>(); ... part1.ad
String line = "10,23;190,33;86,423;132,45";
ArrayList<Double> part1 = new ArrayList<>();
ArrayList<Double> part2 = new ArrayList<>();
...
part1.add("10,23");
part2.add("190,33");
拆分方法是解决此问题的方法。它将根据分隔符进行拆分,并返回一个子字符串数组
string[] subStrings = line.split(";");
我想你并不真的需要多个Arraylist。只需使用一个:
ArrayList<Double> list = new ArrayList<Double>();
line = line.replace(",", ".");
String[] tokens = line.split(";");
for(int x=0; x<list.size(); x++)
list.add(Double.parseDouble(token[x]));
ArrayList list=new ArrayList();
行=行。替换(“,”,“);
String[]tokens=line.split(“;”);
对于(int x=0;x如果要在一个列表中填充字符串中的双精度,可以在一行中完成:
List<Double> parts = Arrays.stream(line.split(";")).map(elem -> new Double(elem.replace(",", "."))).collect(Collectors.toList());
List parts=Arrays.stream(line.split(“;”).map(elem->newdouble(elem.replace(“,”,”)).collect(Collectors.toList());
当然,您必须处理异常。假设您要解析字符串中的双精度值
下面是一个代码段,它应该满足您的要求:
private static <S, T> void distributeValues(S[] sourceParts, Function<S, T> transformFunction, List<T> ... targetParts) {
for (int i = 0; i < sourceParts.length; i++) {
S part = sourceParts[i];
targetParts[i].add(transformFunction.apply(part));
}
}
通过这种方式,您可以自由选择要填充的列表。如果您需要类似的内容,您甚至可以指定part1、part2、part1、part2
主要方法示例:
public static void main(String[] args) {
String line = "10,23;190,33;86,423;132,45";
List<Double> part1 = new ArrayList<>();
List<Double> part2 = new ArrayList<>();
List<Double> part3 = new ArrayList<>();
List<Double> part4 = new ArrayList<>();
distributeValues(line.split(";"), s -> Double.valueOf(s.replace(",", ".")), part1, part2, part3, part4);
System.out.println("part1 = " + part1);
System.out.println("part2 = " + part2);
System.out.println("part3 = " + part3);
System.out.println("part4 = " + part4);
}
为什么不使用String[]res=line.split(;”);
?但不确定最终需要得到什么。您真的需要不止一个ArrayList吗?我想说的是:ArrayList part1.add(“10,23”)
无法通过我的眼睛编译器…我知道你在举例,但是…语法太错误,类型太错误…如果该行是文件的一部分,并且你想将每一列(如CSV文件)保存到专用的arraylist中,那么你应该问这个问题。()虽然这可能是对的,但它并不能满足他拥有多个数组列表的要求。@Pavneethingh,这取决于您的数字格式。有些国家使用,
而不是
作为十进制。在这种情况下,您可以先将所有,
替换为
。@MuratK。我认为这实际上是相当明显的只需要1个arraylist。他可能误解了arraylist的用法,因此想要使用多个列表。
distributeValues(line.split(";"),
s -> Double.valueOf(s.replace(",", ".")),
part1, part2, part3, part4);
public static void main(String[] args) {
String line = "10,23;190,33;86,423;132,45";
List<Double> part1 = new ArrayList<>();
List<Double> part2 = new ArrayList<>();
List<Double> part3 = new ArrayList<>();
List<Double> part4 = new ArrayList<>();
distributeValues(line.split(";"), s -> Double.valueOf(s.replace(",", ".")), part1, part2, part3, part4);
System.out.println("part1 = " + part1);
System.out.println("part2 = " + part2);
System.out.println("part3 = " + part3);
System.out.println("part4 = " + part4);
}
part1 = [10.23]
part2 = [190.33]
part3 = [86.423]
part4 = [132.45]