【问题标题】:Assign number on specific line to a variable将特定行上的数字分配给变量
【发布时间】:2013-08-22 10:36:12
【问题描述】:

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

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

我不知道该怎么做。可以不用正则表达式吗?

这是一个示例 txt 文件的摘录。我正在寻找(然后比较 Value(2)Value(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

【问题讨论】:

  • 标记Java时,无需编写[Java]。
  • 为什么要强调“未知”?
  • 因为此代码将用于打开许多具有此布局的文件。我必须浏览每个文件,检查代码中的数字和位置。
  • 你有迭代的问题吗?你问到关于提取值的问题,我想我们给了你一些关于这个问题的答案。

标签: java regex string variables substring


【解决方案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】:

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

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

    【讨论】:

    • 对不起。我花了一段时间才完成这些答案。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2021-02-09
        • 2018-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-04
        • 2018-04-18
        • 1970-01-01
        相关资源
        最近更新 更多