我正在尝试一种方法来检查符号 & 后面的字符是数字还是字母;如果是数字,则将其转换为二进制;如果是字母,则设置为 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));
}