【发布时间】:2011-05-31 00:57:42
【问题描述】:
我想读取一个文件并检测符号后面的字符是数字还是单词。如果是数字,我想把前面的符号删掉,把数字翻译成二进制,替换到文件中。如果是单词,我想先将字符设置为数字 16,但是,如果使用另一个单词,我想将 1 添加到原始数字。这就是我想要的:
如果文件名读取(...表示不需要翻译的字符串):
%10
...
%firststring
...
%secondstring
...
%firststring
...
%11
...
and so on...
我希望它看起来像这样:
0000000000001010 (10 in binary)
...
0000000000010000 (16 in binary)
...
0000000000010001 (another word was used, so 16+1 = 17 in binary)
...
0000000000010000 (16 in binary)
...
0000000000001011 (11 in binary)
这是我尝试过的: anyLines 只是一个包含文件内容的字符串数组(如果我说 System.out.println(anyLines[i]),我会将文件的内容打印出来)。
已更新!
try {
ReadFile files = new ReadFile(file.getPath());
String[] anyLines = files.OpenFile();
int i;
int wordValue = 16;
// to keep track words that are already used
Map<String, Integer> wordValueMap = new HashMap<String, Integer>();
for (String line : anyLines) {
// if line doesn't begin with &, then ignore it
if (!line.startsWith("@")) {
continue;
}
// remove
line = line.substring(1);
Integer binaryValue = null;
if (line.matches("\\d+")) {
binaryValue = Integer.parseInt(line);
}
else if (line.matches("\\w+")) {
binaryValue = wordValueMap.get(line);
// if the map doesn't contain the word value, then assign and store it
if (binaryValue == null) {
binaryValue = wordValue;
wordValueMap.put(line, binaryValue);
++wordValue;
}
}
// I'm using Commons Lang's StringUtils.leftPad(..) to create the zero padded string
System.out.println(Integer.toBinaryString(binaryValue));
}
现在,我只需要用二进制值替换符号(%10、%firststring 等)。
执行此代码后,我得到的输出是:
1010
10000
10001
10000
1011
%10
...
%firststring
...
%secondstring
...
%firststring
...
%11
...
现在我只需要将 %10 替换为 1010,将 %firststring 替换为 10000 等等,这样文件就会变成这样:
0000000000001010 (10 in binary)
...
0000000000010000 (16 in binary)
...
0000000000010001 (another word was used, so 16+1 = 17 in binary)
...
0000000000010000 (16 in binary)
...
0000000000001011 (11 in binary)
您对如何完成这项工作有任何建议吗?
【问题讨论】: