2012-10-13 32 views
0

以下程序從名爲tes.txt的文件中讀取文本,並將純英文字符串與整個文件中相同的Urdu字符串分開。它在每個英語單詞之後都起着郵票的作用。 文件看起來像:(烏爾都語字符串遵循英文字符串)當我期望英文字符串時得到一個奇怪的輸出

سٹیمپ ختم ہو جاتی ہے 

suhail 

سٹیمپ ختم ہو جاتی ہے 

gupta 

سٹیمپ ختم ہو جاتی ہے 

ghazal 
سٹیمپ ختم ہو جاتی ہے 

在使用我編譯下面的程序窗口:

import java.io.*; 

class checker { 
public static void main(String args[]) { 
try { 
    File f = new File("C:/Users/user/Desktop/tes.txt"); 
    FileReader reader = new FileReader(f); 
    char buffer[] = new char[1024]; 
    String text = ""; 
    while(reader.read(buffer) > 0) { 
     text += buffer.toString(); 
    } 

    String splits[] = text.split("سٹیمپ ختم ہو جاتی ہے"); 

    for(int i=0;i<splits.length;i++) { 
     System.out.println(splits[i]); 
    } 
} catch(Exception exc) { 
    exc.printStackTrace(); 
    } 
} 
} 

javac -encoding UTF-8 checker.java。但當我運行這個程序我得到輸出爲[[email protected]。爲什麼是這樣 ?此外,它只打印數組中的一個字符串。我也檢查了緩衝區陣列的長度,結果是一個。爲什麼一個(文件中有多個字符串在將其從正則表達式中分離出來後會進入緩衝區)?我在哪裏犯了一個錯誤?

+1

首先,你不想被調用'buffer.toString()',而是用緩衝區的內容創建一個新的字符串 - 如果內存服務的話,就像'new String(buffer,charset)'。可能還有其他問題 - 我會稍後再嘗試。 – lifelongcoug

回答

0

字符緩衝區[]沒有正確添加到字符串中,請更改此行。

 text += new String(buffer); 

*對不起,我以前的答案我有點困了。

+0

我的代碼有什麼問題?當你使用text + = buffer.toString()時,你可以請你解釋一下 –

+1

你正在給文本添加數組的表示,而不是數組的內容。這不是從char數組創建新字符串的正確方法 – PbxMan

+0

它現在正在工作,但字符串'text'不是從urdu文本中斷開的[這是我所看到的輸出](http://i47.tinypic。 COM/10ftjkm.jpg)。此外陣列'分裂'的長度是1 –

0

你的錯誤是假定數組的toString爲你提供了它的元素的文本表示。它不是。你希望java.util.Arrays.toString(數組)。

另外,假設文件中有5個字符;你在你的1024個字符的緩衝區中讀取5個字符,並將所有1024個字符添加到你的字符串。這是1019個空字符。我建議使用BufferedReader.readLine()來讀取文件到一個字符串甚至番石榴的Files.toString(文件文件,字符串字符集)

然而,要解釋你如何解決你的問題,你只需要存儲讀取的字符數量,並只使用陣列中的許多字符。如果這還不夠清楚,讓我知道,我會寫一個代碼示例。

+0

我寫這[代碼](http://i47.tinypic.com/idvbpz.jpg),字符串不分裂在烏爾都語正則表達式,我得到[輸出爲此](http://i49.tinypic.com/6qb1vk.jpg)分裂數組的長度也是一個。 –

0

你是不是在文件內容讀取正確的,這裏是一個更好的方式來讀取內容:

String text = ""; 
int readcount=0; 
while((readcount = reader.read(buffer)) != -1) { 
    text += new String(buffer, 0, readcount); 
} 

String[] splits = text.split("سٹیمپ ختم ہو جاتی ہے"); 
相關問題