我有一个不同值的字符串,以“;”分隔没有空间。如何保存第一个值直到“;”进入ArrayList part1,第二个值进入下一个ArrayList,依此类推?
MockMultipartFile jsonFile = new MockMultipartFile("coverFile", "", "application/json",
"{\"json\": \"someValue\"}".getBytes());
我尝试了以下功能,但这不起作用:
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");
答案 0 :(得分:2)
如果想要在String中填充一个带有双打的List,可以在一行中完成:
List<Double> parts = Arrays.stream(line.split(";")).map(elem -> new Double(elem.replace(",", "."))).collect(Collectors.toList());
当然,您必须处理例外情况。
答案 1 :(得分:2)
假设您要解析字符串中的double值。
以下是一段代码片段,可以满足您的需求:
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));
}
}
对该方法的调用可能如下所示:
distributeValues(line.split(";"),
s -> Double.valueOf(s.replace(",", ".")),
part1, part2, part3, part4);
通过这种方式,您可以自由选择要填充的列表。如果您需要这样的话,您甚至可以指定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);
}
打印:
part1 = [10.23]
part2 = [190.33]
part3 = [86.423]
part4 = [132.45]
答案 2 :(得分:1)
我猜你真的不需要多个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]));
"1.1;2,2;3,3;4.4;5.5"
"1.1"
,"2.2"
,"3.3"
,"4.4"
,"5.5"
存储为字符串数组答案 3 :(得分:0)
split方法就是解决这个问题的方法。它将基于分隔符进行拆分并返回一个子字符串数组。
string[] subStrings = line.split(";");