Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 解析带前缀的逗号分隔字符串_Java_String - Fatal编程技术网

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