我需要从文件中提取一些数据,以便将其转换为对象才能进行处理.

我收到以下格式的文本文件中的数据:

Card 1: 32 45 ... 88  1

我的模型是:

public class Card {
    private Integer id;
    private List<Integer> values;
    // getters and setters
}

因此,在这个例子中,对象将是(JSON):

{
  "id": 1,
  "values": [32, 45, ..., 88, 1]
}

Note: In the model the numbers are formatted ad 100, so between 101 and 102 there are 2 spaces

我的目标是使用PatternMatcher提取所有数据,以获得比使用String#split()更干净的解决方案.

在判断了一些像this one这样的帖子和从那里链接的帖子之后,我得出的结论是,我可以用以下内容提取id字段

Matcher m = Pattern.compile("Card\\s+(\\d+):(\\s+(\\d+))+").matcher(input);
Integer id = Integer.parseInt(m.group(1));

但我不知道如何从输入中提取values列表.是否可以使用此方法从该输入中提取值?它应该是这样的

Matcher m = Pattern.compile("Card\\s+(\\d+):(\\s+(\\d+))+").matcher(input);
Integer id = Integer.parseInt(m.group(1));
List<Integer> values = new ArrayList<>();
while (m.find()) {
    values.add(m.group()); // or some other iteration to get groups from 2 to N
}

让我知道如果有其他信息或澄清需要.提前感谢您的回答.

推荐答案

我仍然会使用Split.

  • 在空格和冒号的任意组合上拆分字符串.
  • 然后跳过第一个值(字符串card)并收集到一个列表中
  • 然后对列表进行后期处理并填充Card实例.
String input = "Card 1: 32 45 99 44 33 88  1";


Card firstCard = Arrays.stream(input.split("[:\\s]+")).skip(1)
        .map(Integer::parseInt)
        .collect(Collectors.collectingAndThen(Collectors.toList(),
                lst->new Card(lst.get(0), new ArrayList<>(lst.subList(1, lst.size())))));

System.out.println(firstCard);

fingerprint

card = 1 : [32, 45, 99, 44, 33, 88, 1]

Collectors.toList()是不变的.所以我通过了sublistnew ArrayList<>().

Java相关问答推荐

如何从片段请求数据到活动?在主要活动中单击按钮请求数据?

Java 22模式匹配不适用于记录模式匹配.给出汇编问题

Java inline Double条件和值解装箱崩溃

Java记录的不同序列化/反序列化

条件加载@ManyToMany JPA

如何使用Maven和Spring Boot将构建时初始化、跟踪类初始化正确传递到本机编译

无法了解Java线程所消耗的时间

PDFBox未加载内容

OpenGL ES 3.0-纹理黑色

try 将JSON字符串响应从API转换为映射字符串、对象>;时出错

如何在JavaFX循环中完美地制作一个AudioClip/MediaPlayer?

垃圾收集时间长,会丢弃网络连接,但不会在Kubernetes中反弹Pod

使用SWIG将C++自定义单元类型转换为基本Java类型

项目react 堆中doOnComplete()和Subscribe()的第三个参数之间的差异

在使用具有不同成本的谓词调用allMatch之前对Java流进行排序会带来什么好处吗?

如何在不作为类出现的表上执行原生查询?

如何通过Java java.lang.Foreign API访问本机字节数组

错误:JOIN/ON的参数必须是boolean类型,而不是bigint类型.Java Spring启动应用程序

简化每个元素本身都是 map 列表的列表

可以';不要在Intellij IDEA中使用最新的Java版本(JDK 21)