所以我正在读一个文件(比如java program< trace.dat),它看起来像这样:
58
68
58
68
40
c
40
48
FA
如果我很幸运,但更多时候每行前后都有几个空白字符。
这些是我正在解析的十六进制地址,我基本上需要确保我可以使用扫描仪,缓冲读取器获取该行...无论如何,并确保我可以将十六进制转换为整数。这就是我到目前为止所做的:
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...
所以我已经将我的所有错误都追溯到解析输入和东西所以我想我只是想弄清楚我需要什么样的正则表达式或方法来让它按照我想要的方式工作。
答案 0 :(得分:4)
s.next()
负责处理白色空间。 (默认的标记器不关心它们。)
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)
获取实际的十六进制数