我一直在爲此工作了幾天,現在我無法取得任何進展。我嘗試過使用Scanner和BufferedReader,但沒有運氣。使用BufferedReader翻譯字符串(Java)
基本上,我有,需要一個String並縮短其工作方法(shortenWord)按照此格式的文本文件:「你好」
hello,lo
any,ne
anyone,ne1
thanks,thx
這也說明了這樣的標點符號變成'lo?'等等。
我需要能夠讀取一個字符串並單獨翻譯每個單詞,所以「你好?任何人都謝謝!」將變成「低級ne1 thx!」,基本上使用我已經擁有的字符串中每個單詞的方法。我所擁有的代碼將會翻譯第一個單詞,但對其他單詞不起作用。我認爲這與我的BufferedReader的工作方式有關。
import java.io.*;
public class Shortener {
private FileReader in ;
/*
* Default constructor that will load a default abbreviations text file.
*/
public Shortener() {
try {
in = new FileReader("abbreviations.txt");
}
catch (Exception e) {
System.out.println(e);
}
}
public String shortenWord(String inWord) {
String punc = new String(",?.!;") ;
char finalchar = inWord.charAt(inWord.length()-1) ;
String outWord = new String() ;
BufferedReader abrv = new BufferedReader(in) ;
// ends in punctuation
if (punc.indexOf(finalchar) != -1) {
String sub = inWord.substring(0, inWord.length()-1) ;
outWord = sub + finalchar ;
try {
String line;
while ((line = abrv.readLine()) != null) {
String[] lineArray = line.split(",") ;
if (line.contains(sub)) {
outWord = lineArray[1] + finalchar ;
}
}
}
catch (IOException e) {
System.out.println(e) ;
}
}
// no punctuation
else {
outWord = inWord ;
try {
String line;
while((line = abrv.readLine()) != null) {
String[] lineArray = line.split(",") ;
if (line.contains(inWord)) {
outWord = lineArray[1] ;
}
}
}
catch (IOException ioe) {
System.out.println(ioe) ;
}
}
return outWord;
}
public void shortenMessage(String inMessage) {
String[] messageArray = inMessage.split("\\s+") ;
for (String word : messageArray) {
System.out.println(shortenWord(word));
}
}
}
任何幫助,或者甚至在正確的方向微調將非常讚賞。
編輯:我試過在shortenWord方法結束時關閉了BufferedReader,它只是導致我在第一個表示BufferedReader關閉後的字符串中的每個單詞出現錯誤。
在一個不相關的一面注:我想像這樣的詞縮寫是任何英語老師的噩夢燃料。 – 2015-04-02 10:23:08
對於每個單詞都一遍又一遍地閱讀文件是毫無意義的,而且您實際上並沒有這樣做,因爲一旦您達到文件末尾,如果您沒有重新打開或倒帶它,它將停留在文件的結尾。更好的邏輯是打開文件,讀取一行,然後將替換應用到每個這樣的行。 – RealSkeptic 2015-04-02 10:25:53
或將「翻譯」讀取到「Map」中。另外爲什麼你在使用'String punc = new String(「,?。!;」);'而不是'String punc =「,?。!;」;'? –
fabian
2015-04-02 10:33:00