我想读取一个文件并检测符号后面的字符是数字还是单词。如果是数字,我想删除它前面的符号,将数字翻译成二进制并替换在文件中。如果是一个单词,我想首先将字符设置为数字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]),我会打印出文件的内容)。
UPDATED!
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)
您对如何开展这项工作有什么建议吗?