【发布时间】:2011-05-26 02:32:20
【问题描述】:
我正在尝试一种方法来检查符号 & 后面的字符是数字还是字母;如果是数字,则将其转换为二进制;如果是字母,则设置为 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));
}
【问题讨论】:
-
你能描述一下它“不起作用”的方式吗?
-
它只是保留了找到的字符串,带有“&”符号,即使我明确表示我不想要它
-
您能否简化代码并缩小问题所在?回答问题很有趣,但也有很多。添加一些示例输入和输出也会有所帮助。
-
还有toBinaryString方法中131072的作用是什么?
-
@Varun,它是一种对二进制数进行零填充的方法。 ;)
标签: java file integer character letter