在java中提取两个相同字母之间的值

时间:2016-10-13 10:38:21

标签: java regex

String data ="A486A946D48967E456F679B3425B234C847C
             A725A872D74985E45346F679B86705B234C2847C
Output should be in format like below:
-486
-3425
-847

-725
-86705
-2847

以上是我想要提取值的数据。它们采用相同的格式,例如:A...A...D...E...F...B...B...C...C,其中点代表数字。

我想像上面那样提取A-A, B-BC-C之间的数字。所有这些数据都以字符串形式存储在一行中。我使用了模式匹配器,但它没有用。请提出任何建议。

2 个答案:

答案 0 :(得分:6)

Pattern pattern = Pattern.compile("([A-Z])(\\d+)\\1");
Matcher m = pattern.matcher(data);
while (m.find()) {
    String letter = m.group(1);
    String digits = m.group(2);
    int n = Integer.parseInt(digits);
    System.out.printf("- %s = %d%n", letter, n);
}

该模式包括:

  • ([A-Z]) =第1组,大写字母
  • (\d+) =有一个或多个数字的第2组
  • \1 =第1组的值

答案 1 :(得分:1)

您可以使用以下代码。

char c1 = '\0';
char c2 = '\0';
String str = "";
for(int i = 0;i < data.length();++i)
{
 if(data.charAt(i) >= 65&&data.charAt(i) <= 90)
 {
  if(c1 == '\0')
   c1 = data.charAt(i);
  else if(c2 == '\0')
   c2 = data.charAt(i);
  if(c1 != '\0' && c2 != '\0')
   { 
    if(c1 == c2 && str.length() != 0)
     System.out.println("-"+str);
    str = "";
    c1 = c2;
    c2 = '\0';
   }
 }
 else 
  str += data.charAt(i);
}