2012-10-14 134 views
0

我正在嘗試編寫代碼以將給定文本文件的所有字符(包括空格)導入到單個字符串中進行分析。我在Java中使用給定的文件,並將它放在一起時遇到了一個奇怪的錯誤。我完全不熟悉編碼,並希望澄清。發生什麼是在下面的代碼中,當我設置將字符附加到字符串上

text.append(ch);

我有Default的構造函數的錯誤,不能處理X引發的異常,必須定義顯式的構造函數;

當我設置text.append('ch');

上面的錯誤消失了,我的'ch'行只給了無效的char const。錯誤,通過刪除's可修復。

所以我認爲我必須爲我的Java的Givens構造一個顯式構造函數,這是否有必要?由於我不知道如何去做,所以最好有一個迂迴的解決方案。

import java.io.FileInputStream; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.Reader; 
import java.lang.StringBuilder; 

public class TextReader //cannot place inputs/outputs of string on this line 
{ 

StringBuilder text = new StringBuilder(); 
//StringBuilder google 
//google end of file check java 

InputStream in = new FileInputStream("charfile.txt"); 
Reader r = new InputStreamReader(in, "US-ASCII"); 
int intch; 
{ 
while ((intch = r.read()) != -1) 
{ 
    char ch = (char) intch; 
     // ... 
    text.append(ch); //if I make this a 'ch', the errors above go away, what's the problem? 
} 
} 

} 
+0

不,這不是問題 –

+1

什麼?如果你有'ch',它不應該讓錯誤消失。你能解釋得更好嗎? –

+0

好吧,如果我使它'ch'我認爲java側重於更明顯的錯誤。 當ch爲'ch'時,字符串中唯一的錯誤是'ch'不是有效常量的錯誤字符 – Sukwoo

回答

0

您需要將語句放在代碼塊中,例如, main方法。

public static void main(String[] args) throws IOException { 
    StringBuilder text = new StringBuilder(); 
    // StringBuilder google 
    // google end of file check java 

    InputStream in = new FileInputStream("charfile.txt"); 
    Reader r = new InputStreamReader(in, "US-ASCII"); 
    int intch; 
    { 
     while ((intch = r.read()) != -1) { 
      char ch = (char) intch; 
      // ... 
      text.append(ch); 
     } 
    } 
} 

的陳述

InputStream in = new FileInputStream("charfile.txt"); 
Reader r = new InputStreamReader(in, "US-ASCII"); 

兩個罰球檢查不能在類塊發生異常。

+0

嗯,我想我忽略了這一點。 如果我只是想用它作爲一個方法從另一個主要方法調用另一個忽略整個項目的文件,這仍然是真的嗎? – Sukwoo

+0

不知道我得到你的問題,但任何聲明拋出異常或非聲明式語句應該出現在代碼塊中。 – Reimeus

0

其實java中的IO需要try和catch塊,否則會給你錯誤。此外,在上面的代碼中你必須把宣言中明確定義構造函數

TextReader() 
{ 
//----------- Your Code here. 
} 
0

當你這樣做text.append(ch);,誤差不應以這條線。它可能會抱怨其他問題,例如預期異常未處理或拋出,例如

已處理:

try{ 
    while ((intch = r.read()) != -1){ 
     char ch = (char) intch; 
      // ... 
     text.append(ch); 
    } 
     }catch(IOException ioex){ 
      ioex.printStackTace(); 
     } 

時拋出:

更改您的方法聲明與throws條款爲:

public static void main(String[] args) throws IOException{ 

當你說text.append('ch');,你的說法是不是一個變量或單字符文字任何米礦石。 您應該在該行收到編譯錯誤。雖然你可以做一些像text.append('c');那樣的c是一個單獨的字符。