用于匹配文件中hex数的Java Regex

所以我正在读一个文件(如java程序<trace.dat),它看起来像这样:

58 68 58 68 40 c 40 48 FA 

如果我很幸运,但更常见的是每行前后都有几个空白字符。

这些是hex地址,我正在解析,我基本上需要确保我可以使用扫描仪,缓冲读取器…任何东西,并确保我可以然后将hex转换为整数。 这是我到目前为止:

 Scanner scanner = new Scanner(System.in); int address; String binary; Pattern pattern = Pattern.compile("^\\s*[0-9A-Fa-f]*\\s*$", Pattern.CASE_INSENSITIVE); while(scanner.hasNextLine()) { address = Integer.parseInt(scanner.next(pattern), 16); binary = Integer.toBinaryString(address); //Do lots of other stuff here } //DO MORE STUFF HERE... 

所以我已经将我的所有错误都追溯到解析输入和东西所以我想我只是想弄清楚我需要什么样的正则表达式或方法来让我按照我想要的方式工作。

s.next()负责处理空格。 (默认的tokenizer不关心它们。)

 import java.util.Scanner; public class Test { public static void main(String... args) { Scanner s = new Scanner(System.in); while (s.hasNext()) System.out.println(Integer.parseInt(s.next(), 16)); } } 

如果您真的想坚持使用Pattern-approach,我建议您使用XDigit类:

 \p{XDigit} A hexadecimal digit: [0-9a-fA-F] 

更多; scanner.next(pattern)将返回整个匹配的模式(包括空格!)您需要使用捕获组。 试试这个模式

 ^\\s*(\\p{XDigit}+)\\s*$ 

然后使用matcher.group(1)获取实际的hex数