gpt4 book ai didi

java - 解析带有前缀的逗号分隔字符串

转载 作者:行者123 更新时间:2023-11-30 06:03:44 33 4
gpt4 key购买 nike

我得到以下格式的逗号分隔字符串:

String codeList1 = "abc,pqr,100101,P101001,R108972";

String codeList2 = "mno, 100101,108972";

预期结果:删除第一个字母后检查代码是否为数字。如果是,则删除前缀并返回。如果不是,仍然返回代码。

codeList1 = "abc,pqr,100101,101001,108972"; 

codeList2 = "mno, 100101,108972";

如您所见,我可以获得代码(P101001 或 101001)和(R108972 ,108972)格式。只会有一个前缀。

如果我得到(P101001),我想删除“P”前缀并返回数字101001。

如果我得到 101001,则什么也不做。

下面是工作代码。但是有没有更简单或更有效的方法来实现这一目标。请帮忙

for (String code : codeList.split(",")) {
if(StringUtils.isNumeric(code)) {
codes.add(code);
} else if(StringUtils.isNumeric(code.substring(1))) {
codes.add(Integer.toString(Integer.parseInt(code.substring(1))));
} else {
codes.add(code);
}
}

最佳答案

如果您想从号码中删除前缀,您可以轻松使用:

String[] codes = {"abc,pqr,100101,P101001,R108972", "mno, 100101,108972"};
for (String code : codes){
System.out.println(
code.replaceAll("\\b[A-Z](\\d+)\\b", "$1")
);
}

输出

abc,pqr,100101,101001,108972
mno, 100101,108972

如果您使用的是 Java 8+,并且只想提取数字,则可以使用:

String codeList1 = "abc,pqr,100101,P101001,R108972";
List<Integer> results = Arrays.stream(codeList1.split("\\D")) //split with non degits
.filter(c -> !c.isEmpty()) //get only non empty results
.map(Integer::valueOf) //convert string to Integer
.collect(Collectors.toList()); //collect to results to list

输出

100101
101001
108972

关于java - 解析带有前缀的逗号分隔字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51421376/

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