如何将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
答案 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
}