我有一个api,它返回以下格式的字符串:

ACTNEW_38_0001,ACTO_57999

我需要提取数值(57999或38\u 0001),但:

1:他们可以按不同的顺序到达.

2:它只能到达其中一个.

3:它必须很轻.

我大致知道怎么做.我的实际代码大致如下所示:

private final String tipoActivity = "ACTO_";
    private String obtenerSplitOldElem(String toSplit) {
        if(toSplit.contains(",")) {
            String[] split = toSplit.split(",");
            int element = ArrayUtils.indexOf(toSplit, "ACTO_");
            String split2[] = split[element-1];
            return split2[1];
            
        } else {
            String[] split = split.split("ACTO_");   
            return split[1];
          }
        return "";
    }

问题是:

1:我认为应该有更好的方法来实现这一点.

2:我还没有试过arrayUtils.indexOf.如果它不起作用,我将不得不做一个包含,可能是在for循环中,但我认为这样简单的事情是个坏主意.

任何帮助都将不胜感激.谢谢

推荐答案

您可以在CSV字符串上使用regex find all方法:

String input = "ACTNEW_38_0001,ACTO_57999";
List<String> nums = Pattern.compile("\\d+(?:_\\d+)*")
    .matcher(input)
    .results()
    .map(MatchResult::group)
    .collect(Collectors.toList());
System.out.println(nums);  // [38_0001, 57999]

Java相关问答推荐

Spring安全实现多个SQL表身份验证

JsonPath在多个线程中返回错误的值

如何配置ActiveMQ Artemis以使用AMQP 1.0和其他协议与Java

路径映射未发生

蒙蒂霍尔比赛结果不正确

如何解释Java中for-each循环中对Iterable的强制转换方法引用?

将响应转换为带值的键

如何在Spring Java中从数据库列中获取JSON中的具体数据

Spring Boot&;Docker:无法执行目标org.springframework.boot:spring-boot-maven-plugin:3.2.0:build-image

Java组件项目中的JavaFX对话框国际化

IntelliJ IDEA依赖项工具窗口丢失

在JDK Flight Recorder中只记录单个线程

每次我需要时创建和关闭数据库连接会有什么效果吗?

在缺少字段时使用Jackson With Options生成Optional.Empty()

基于Java中mm/dd/yy格式的最近日期对数组列表进行排序

不能在 map 上移除折线

Java递归泛型是否可以被视为继承和重写的语法糖

如何使用带有可选参数的类生成器?

Java 21保护模式的穷尽性

[Guice/MissingImplementation]:未绑定任何实现