概括地說,這裏就是我想要做的事:硬編碼字符串作品中,輸入字符串不
我想讀取文件,並檢測符號後的字符是數字或字。如果它是一個數字,我想刪除它前面的符號,將該數字轉換爲二進制數,並將其替換爲文件中的數字。如果它是一個單詞,我想首先將字符設置爲數字16,但是如果使用另一個單詞,我想將1添加到原始數字並繼續循環,直到到達輸入的末尾。
當我硬代碼,我想輸入字符串閱讀:
String input = "@5\[email protected]\[email protected]\[email protected]\[email protected]";
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));
}
}
}
你能指出我朝着正確的方向嗎?
機會是,輸入是壞/不同。將'anyLines'作爲一個數組有點讓人困惑,但是然後你將每個數組元素分開,好像每個元素本身就是一個文件一樣。 – pickypg 2011-05-31 02:49:09
@ pickypig,沒關係,我解決了它。但現在,它正在循環16次。 – rudna1010 2011-05-31 03:07:42