我想读取一个文件并检测符号后面的字符是数字还是单词。如果是数字,我想删除它前面的符号,将数字转换为二进制文件并将其替换为文件。如果是单词,我想首先将字符设置为数字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)
您对如何使这项工作有任何建议吗?
答案 0 :(得分:2)
这个可能正在做你认为它正在做的事情:
int binaryValue = wordValue++;
因为您正在使用后增量运算符,所以为二进制值分配旧的worldValue值,然后然后 worldValue递增。我会在两个单独的行上执行此操作,首先完成增量:
wordValue++;
int binaryValue = wordValue; // binaryValue now gets the new value for wordValue
编辑1
好的,如果您仍然需要我们的帮助,我建议您执行以下操作:
示例代码格式:
try {
ReadFile files = new ReadFile(file.getPath());
String[] anyLines = files.OpenFile();
String[] anyLines = {};
int i;
// test if the program actually read the file
for (i = 0; i < anyLines.length; i++) {
String[] lines = anyLines[i].split("\n");
int wordValue = 76;
Map<String, Integer> wordValueMap = new HashMap<String, Integer>();
for (String currentLine : lines) {
if (!currentLine.startsWith("%")) {
continue;
}
currentLine = currentLine.substring(1);
Integer value;
if (currentLine.matches("\\d+")) {
value = Integer.parseInt(currentLine);
} else if (currentLine.matches("\\w+")) {
value = wordValueMap.get(currentLine);
if (value == null) {
int binaryValue = wordValue++;
wordValueMap.put(currentLine, binaryValue);
// TODO: fix below
// !! currentLine.replace(currentLine, binaryValue);
value = binaryValue;
}
} else {
System.out.println("Invalid input");
break;
}
System.out.println(Integer.toBinaryString(value));
}
}
} finally {
// Do we need a catch block? If so, catch what?
// What's supposed to go in here?
}
运气!