2

I have an api which returns a String in the following format:

ACTNEW_38_0001,ACTO_57999

I need to extract the numerical values (57999, or 38_0001) but:

1: They can arrive in different order.

2: It can arrive only one of them.

3: It has to be lightweight.

I roughly know how to do it. My actual code looks more or less like this:

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 "";
    }

The thing is that:

1: I think there should be a better way to achieve this.

2: I haven´t tried yet the arrayUtils.indexOf. If it doesn´t work I would have to do a contains, probably inside a for loop, but I think it´s a bad idea for something so simple.

Any help would be appreciated. Thanks

Dan
  • 3,647
  • 5
  • 20
  • 26
Grismak
  • 192
  • 16

1 Answers1

1

You could use a regex find all approach on your CSV string:

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]
Tim Biegeleisen
  • 502,043
  • 27
  • 286
  • 360
  • Interesting, looks way better than my code, i will look into it and study if i can apply this method to a dinamic sort of input with this type of format, thanks – Grismak May 02 '22 at 06:56