Я пытаюсь получить метод, который проверяет, является ли символ после символа & цифрой или буквой;если число, оно переводится в двоичный код;и если это буква, она устанавливается в 16 и увеличивается на 1, если используется другое слово.Проблема в том, что это не работает для меня, по некоторым причинам.Какие-либо предложения?
try {
ReadFile files = new ReadFile(file.getPath());
String[] anyLines = files.OpenFile();
int i;
for (i=0; i<anyLines.length; i++) {
String input = anyLines[i];
String[] lines = input.split("\n");
int wordValue = 16;
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.toBinaryString(131072 +
Integer.parseInt(anyLines[i])).substring(2,18);
}
else if (line.matches("\\w+")) {
binaryValue = wordValueMap.get(line);
if (binaryValue == null) {
binaryValue = wordValue;
wordValueMap.put(line, binaryValue);
wordValue++;
}
}
}
}
ВХОД:
&4
...
&hello
...
&ok
ВЫХОД:
(5 translated into binary) : 0000000000000100
...
(16 translated into binary)
...
(17 translated into binary, or 16+1)
Вот вывод вашего метода:
101
1001100
1001100
1001100
1001100
1001100
1001100
1001100
&5
1110110000010000
&hello
1110001100001000
&goodbye
1110101010001000
(NEXT)
&goodbye
1111000010001000
&hello
1110001110001000
&BILL
1110001100000110
&NEXT
1110101010000111
(BILL)
&BILL
1110101010000111
А вот оригинальный текст, который я читаю и перебираю (anyLines [i] без каких-либо изменений):
&5
var1
&hello
var2
&goodbye
var2
(NEXT)
&goodbye
var3
&hello
var4
&BILL
var5
&NEXT
var6
(BILL)
&BILL
var5
var - это просто переменная, которая имеет значение.Я уже позаботился об этом.
Вот моя попытка:
String input = "This is a test line\n"
+ "&hello\n"
+ "&4\n"
+ "&32";
String[] lines = input.split("\n");
int wordValue = 26;
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.replace(currentLine, binaryValue);
/*
* This is just there to ensure that the print statement below doesn't have a
* null value.
*/
value = binaryValue;
}
}
else
{
System.out.println("Invalid input");
break;
}
System.out.println(Integer.toBinaryString(value));
}