В двух словах, вот что я пытаюсь сделать:
Я хочу прочитать файл и определить, является ли символ после символа цифрой или словом. Если это число, я хочу удалить перед ним символ, перевести число в двоичное и заменить его в файле. Если это слово, сначала я хочу установить для символов число 16, но затем, если используется другое слово, я хочу добавить 1 к исходному числу и продолжить цикл, пока он не достигнет конца ввода.
Когда я жестко кодирую строку, которую хочу ввести, и читаю:
String input = "@5\n@word1\n@word2\n@word1\n@6";
String[] lines = input.split("\n"); // divide up the array
Или:
@5
@word1
@word2
@word1
@6
Затем выводится то, что я хочу вывести:
101
10000
10001
10000
110
Но когда я вводю anyLines [i] (массив, содержащий информацию о файле, которая может измениться, если выбран другой файл):
String input = anyLines[i];
String[] lines = input.split("\n");
Для тех же данных неожиданно выдается неверный вывод:
101
10000
10000 <-- PROBLEM - should be 10001
10000
110
Теперь проблема в том, что wordValue не увеличивается. В жестко запрограммированной строке wordValue правильно увеличивается.
Вот мой общий метод:
try {
ReadFile files = new ReadFile(file.getPath());
String[] anyLines = files.OpenFile();
int i;
// test if the program actually read the file
for (i=0; i<anyLines.length; i++) {
String input = anyLines[i];
String[] lines = input.split("\n");
int wordValue = 16; // to keep track words that are already used
Map<String, Integer> wordValueMap = new HashMap<String, Integer>();
for (String line : lines) {
// 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));
}
}
}
Можете ли вы указать мне правильное направление, пожалуйста?