将特定行的编号分配给变量

时间:2013-08-20 11:36:07

标签: java regex string variables substring

如何将txt文件中特定行的未知子字符串(十六进制数字)分配给变量?

我已经编写了代码来识别必要的行,并且我被告知要使用正则表达式(正则表达式)。

我不知道该怎么做。可以在没有正则表达式的情况下完成吗?

这是示例txt文件的摘录。我希望得到(然后比较 价值(2) 价值(3) )但我首先需要十六进制数字。

Default(2) = 0x00
Value(2) = 0xE0A64F36
Desc(2) = calculated from application
Address(2) = 0x60
Page(2) = Sensor
Name(3) = ROM CRC32
Type(3) = u32
Default(3) = 0x00
Value(3) = 0xE0A64F36
Desc(3) = fix CRC from ROM

4 个答案:

答案 0 :(得分:3)

=拆分并解析十六进制数。

String s = "Value(2) = 0xE0A64F36";
String hex = s.split("=")[1].trim();
long l = Long.parseLong(hex.substring(2), 16);
// l == 3768995638

答案 1 :(得分:1)

你可以像这样进行提取:

Pattern p = Pattern.compile("Value\\([23]\\) = (0x([0-9A-F]{8}))");
Matcher m = p.matcher(s);
while (m.find()) {
    System.out.println(m.group(1));
    System.out.println(Long.parseLong(m.group(2), 16));
}

注意:如果你只想测试value(2)和value(3)是否相同,你不需要转换任何东西。你只能比较字符串。

答案 2 :(得分:1)

如果你不想使用正则表达式,你必须自己用HEX模式解析字符串,例如获取行的值部分(“=”之后的字符串)并检查此部分是否在HEX格式(从0x开始,后面的字符在0-F中)或使用Integer.parseInt(String s,int radix)来尝试解析它(捕获异常)

答案 3 :(得分:1)

假设您已经提取了字符串并将它们存储在2个变量中,

String value2 = "Value(2) = 0xE0A64F36";
String value3 = "Value(3) = 0xE0A64F36";

您可以使用substring和indexOf来获取实际值:

value2 = value2.substring(value2.indexOf("0x"));
value3 = value3.substring(value3.indexOf("0x"));
if (value2.compareToIgnoreCase(value3) == 0) {
  // Do something here
}