gpt4 book ai didi

java - 如何在 Java 中将整数字符串转换为 ArrayList?

转载 作者:行者123 更新时间:2023-11-30 08:46:13 37 4
gpt4 key购买 nike

我尝试解析一个文本文件,其中的行如下所示:

@KEY,_,0,1,2,_,4,5,6, ...

@KEY只是开头的标识符,而以下数字是我要存储在 ArrayList<Integer> 中的数据.

我有一个元数据类,其中包含我想在其中插入整数的数组列表:

class MetaD {
public List<Integer> key1, key2, key3 = new ArrayList<Integer>();
}

我逐行解析文本文件;当行以 @KEY 开头时, 我想将元素添加到 key1列表。如果有_ ,它应该被替换为一个空值:

    if(line.startsWith("@KEY")){
metaObject.key1 = Arrays.asList(line.replace("@KEY,", "").replace("_", "").trim().split("\\s*,\\s*"));
}

我发现这不适用于 ArrayList<Integer> . key1必须是 ArrayList<String> 类型或 ArrayList<Object>使其发挥作用。

有没有办法以同样的方式转换整数?如果没有,我的想法如下:

  • 将所有内容转换为 ArrayList<String>
  • 迭代这个新的 ArrayList 的每一项并用 Integer.parseInt() 转换它变成一个整数。
  • 将这个新整数添加到我的 ArrayList<Integer>

是否有更有效或更好的方式来满足我的需求?


编辑:由于 Tunaki 在评论中写道,我的想法可能是我尝试执行以下操作的唯一可能方式:

    if(line.startsWith("@KEY")){
List<String> channelTemp = Arrays.asList(line.replace("@KEY,", "").replace("_", "1").split("\\s*,\\s*"));
channelTemp.forEach(item -> metaObject.channel.add(Integer.parseInt(item)));
System.out.println("done");
}

不幸的是,这会抛出一个 NullPointerException在这里的第三行,我不知道为什么。我替换了 _1用于测试目的以避免 NumberFormatException .当我打印出 lambda 函数中的每个对象而不是将它们添加到我的 ArrayList<Integer> 时,我可以看到所有项目都有一个整数值。那么,为什么我会在这里遇到异常?

最佳答案

既然你快到了,我会帮你的。

String line = "@KEY,_,0,1,2  , _,4,5,6,";
List<Integer> collect = Arrays.stream(line.replaceAll("@KEY|_", "").split(","))
.map(String::trim)
.filter(s -> !s.isEmpty())
.map(Integer::valueOf).collect(Collectors.toList());
System.out.println(collect);

编辑

要获取 null,您可以像这样更改映射过程:

List<Integer> collect = Arrays.stream(line.split(","))
.skip(line.startsWith("@KEY") ? 1 : 0)
.map(String::trim)
.filter(s -> !s.isEmpty())
.map(s -> "_".equals(s) ? null : Integer.valueOf(s)).collect(Collectors.toList());

关于java - 如何在 Java 中将整数字符串转换为 ArrayList?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32936353/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com