2011-05-31 119 views
1

概括地說,這裏就是我想要做的事:硬編碼字符串作品中,輸入字符串不

我想讀取文件,並檢測符號後的字符是數字或字。如果它是一個數字,我想刪除它前面的符號,將該數字轉換爲二進制數,並將其替換爲文件中的數字。如果它是一個單詞,我想首先將字符設置爲數字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)); 
     } 
    } 
} 

你能指出我朝着正確的方向嗎?

+0

機會是,輸入是壞/不同。將'anyLines'作爲一個數組有點讓人困惑,但是然後你將每個數組元素分開,好像每個元素本身就是一個文件一樣。 – pickypg 2011-05-31 02:49:09

+0

@ pickypig,沒關係,我解決了它。但現在,它正在循環16次。 – rudna1010 2011-05-31 03:07:42

回答

1

該代碼乍看起來沒問題。最好的辦法是到可能打印出的線條爲你處理它們,看看他們是... ...奇怪的格式:

for (String line : lines) 
    System.out.println ("[" + line + "]"); 

事實上,我會全力以赴,並把每一行後打印語句,改變的東西(它打印序列號和改變的東西),以確保沒有意外的效果:

喜歡的東西:

else if (line.matches("\\w+")) { 
    binaryValue = wordValueMap.get(line); 
    System.out.println ("A: binval set to " + binaryValue); 

    // if the map doesn't contain the word value, 
    // then assign and store it 
    if (binaryValue == null) { 
     binaryValue = wordValue; 
     System.out.println ("B: binval set to " + binaryValue); 
     wordValueMap.put(line, binaryValue); 
     System.out.println ("C: put " + binaryValue + 
      ", now " + wordValueMap.get(line)); 
     wordValue++; 
     System.out.println ("C: wordval set to " + wordValue); 
    } 
} 

printf的方法調試通常是非常寶貴的,儘管你也可以選擇使用deb ugging工具:-)

+0

我會試試這個結果併發布結果......是的,它爲每個單個字符串時間保持設置16 – rudna1010 2011-05-31 03:06:03