所以我正在读取一个文件(例如java程序
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...
因此,我将所有错误都追溯到解析输入和内容,所以我想我只是想找出需要什么正则表达式或方法才能使其按我想要的方式工作。
The 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));
}
}
如果您真的想坚持使用模式方法,我建议您使用 XDigit 类:
\p{XDigit} A hexadecimal digit: [0-9a-fA-F]
此外;这scanner.next(pattern)
将返回整个匹配模式(包括空格!)您需要使用捕获组。尝试一下图案
^\\s*(\\p{XDigit}+)\\s*$
然后得到实际的十六进制数匹配器.组(1) http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Matcher.html#group%28int%29
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)