Java 解析带前缀的逗号分隔字符串
我得到以下格式的逗号分隔字符串:Java 解析带前缀的逗号分隔字符串,java,string,Java,String,我得到以下格式的逗号分隔字符串: String codeList1 = "abc,pqr,100101,P101001,R108972"; 或 预期结果:删除第一个字母后检查代码是否为数字。如果是,请删除前缀并返回。如果没有,仍然返回代码 codeList1 = "abc,pqr,100101,101001,108972"; 或 如您所见,我可以获得代码(P101001或101001)和(R108972、108972)格式。只有一个前缀 如果我得到(P101001),我想删除'p'前缀和返
String codeList1 = "abc,pqr,100101,P101001,R108972";
或
预期结果:删除第一个字母后检查代码是否为数字。如果是,请删除前缀并返回。如果没有,仍然返回代码
codeList1 = "abc,pqr,100101,101001,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 codeList1 = "abc,pqr,100101,P101001,R108972";
String[] codes = codeList1.split(",");
for (String code : codes) {
if (code.matches("[A-Z]?\\d{6}")) {
String codeF = code.replaceAll("[A-Z]+", "");
System.out.println(codeF);
}
}
100101
101001
108972
如果要从易于使用的数字中删除前缀,请执行以下操作:
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
100101
101001
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
您可以使用
regex
来执行此操作
String str = "abc,pqr,100101,P101001,R108972";
String regex = ",?[a-zA-Z]{0,}(\\d+)";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
while(matcher.find()){
System.out.println(matcher.group(1));
}
输出
100101
101001
108972
更新:
对于您的评论(我想添加代码。如果找到单个字母前缀,请删除它并添加剩余的),您可以使用以下代码:
String str = "abc,pqr,100101,P101001,R108972";
String regex = "(?=,?)[a-zA-Z]{0,}(?=\\d+)|\\s";// \\s is used to remove space
String[] strs = str.replaceAll(regex,"").split(",");
输出:
abc
pqr
100101
101001
108972
R108972中的
R
如何?可以有任何字母前缀,但只能有一个。根据您的问题,是否还要添加像abc
这样的数据?其他
用于什么?请确定预期结果是什么?我想添加代码。如果找到单个字母前缀,请将其删除并添加剩余。您知道什么是code。添加(code)代码>用于OP的问题中?我想他也想添加纯字符串,如abc
@lucumt。不清楚OP结果应该是什么,我将等待OP在顶部回答我的评论!谢谢你的回复。这似乎是更干净的方法。谢谢…有一件事,我正在测试场景,对于这段代码(abc15),它不起作用。它正在删除c并给出结果为ab15。我们能处理这个吗??我只想删除前缀,如果一个字母是coming@MananKapoor你确定?检查it返回abc15
中的abc15
!!
String str = "abc,pqr,100101,P101001,R108972";
String regex = "(?=,?)[a-zA-Z]{0,}(?=\\d+)|\\s";// \\s is used to remove space
String[] strs = str.replaceAll(regex,"").split(",");
abc
pqr
100101
101001
108972