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-B
和C-C
之间的数字。所有这些数据都以字符串形式存储在一行中。我使用了模式匹配器,但它没有用。请提出任何建议。
答案 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);
}