Java 将特定行上的数字指定给变量

Java 将特定行上的数字指定给变量,java,regex,string,variables,substring,Java,Regex,String,Variables,Substring,如何将txt文件中特定行的未知子字符串(十六进制数)分配给变量 我已经编写了识别必要行的代码,并且被告知要使用正则表达式(regex) 我不知道怎么做。没有正则表达式能做到吗 这是一个示例txt文件的摘录。我希望得到(然后比较值(2)和值(3)),但我首先需要十六进制数 Default(2) = 0x00 Value(2) = 0xE0A64F36 Desc(2) = calculated from application Address(2) = 0x60 Page(2) = Sensor N

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

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

我不知道怎么做。没有正则表达式能做到吗

这是一个示例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

您可以按如下方式进行提取:

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));
}

注意:如果只想测试值(2)和值(3)是否相同,则不需要转换任何内容。您只能比较字符串。

您可以这样进行提取:

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));
}

注意:如果只想测试值(2)和值(3)是否相同,则不需要转换任何内容。您只能比较字符串。

=
拆分并解析十六进制数

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

=
拆分并解析十六进制数

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

如果您不想使用正则表达式,您必须自己用十六进制模式解析字符串,例如获取行的值部分(在“=”之后的字符串),并检查该部分是否为十六进制格式(以0x开头,后面的字符为0-F),或者使用Integer.parseInt(字符串s,int基数)尝试解析它(捕捉异常)

如果您不想使用正则表达式,您必须自己用十六进制模式解析字符串,例如获取行的值部分(在“=”之后的字符串),并检查该部分是否为十六进制格式(从0x开始,后面的字符为0-F)或使用Integer.parseInt(字符串s,int基数)要尝试解析它(捕获异常)

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

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
}

假设已经提取了字符串并将其存储在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
}

不需要编写[Java]当
Java
被标记时。你为什么强调“未知”?因为这段代码将用于以这种布局打开多个文件。我必须检查每个文件,检查代码中的数字和位置。你对迭代有问题吗?你问起提取值的问题,我想我们给了你一些关于这个问题的答案没有必要编写[Java]当
Java
被标记时。你为什么强调“未知”?因为这段代码将用于以这种布局打开多个文件。我必须检查每个文件,检查代码中的数字和位置。你对迭代有问题吗?你问起提取值的问题,我想我们给了你一些关于这个问题的答案对不起,我花了一段时间才看完这些答案。对不起,我花了一段时间才看完这些答案。