2015-08-31 128 views
1

我有一個名爲「message.txt」的文本文件,它使用緩衝區讀取器讀取。文本文件的每一行既包含「字」,在這個例子中給出的「意義」:讀取輸入文件的緩衝區讀取器代碼

「PS:小學」

其中PS - 字,小學 - 這意味着

當文件正在被讀取,每行被標記爲「:」的「詞」和「含義」。 如果「含義」等於給定的輸入字符串「f_msg3」,則在名爲「txtView」的文本視圖上顯示「f_msg3」。否則,它會在文本視圖中顯示「f_msg」。

但是「if條件」在此代碼中無法正常工作。例如,如果「f_msg3」等於「小學」,則文本視圖上的輸出必須是「小學」。但它輸出爲「f_msg」,但不是「f_msg3」。 (「f_msg3」不包含任何不必要的字符串。)

有人可以解釋我出錯的地方嗎?

try { 
    BufferedReader file = new BufferedReader(new InputStreamReader(getAssets().open("message.txt"))); 
    String line = ""; 

    while ((line = file.readLine()) != null) { 
    try { 
    /*separate the line into two strings at the ":" */ 
    StringTokenizer tokens = new StringTokenizer(line, ":"); 
    String word = tokens.nextToken(); 
    String meaning = tokens.nextToken(); 

    /*compare the given input with the meaning of the read line */ 
    if(meaning.equalsIgnoreCase(f_msg3)) { 
    txtView.setText(f_msg3); 
    } else { 
    txtView.setText(f_msg); 
    } 
    } catch (Exception e) { 
    txtView.setText("Cannot break"); 
    } 
    } 

} catch (IOException e) { 
    txtView.setText("File not found"); 
} 
+0

這是什麼語言? –

+0

使用的語言是java – zim

+0

您的文本文件是否包含多行 - 其中一些顯示f_msg3和一些f_msg?在這種情況下,最後一行可能會決定txtView中顯示的內容。 – KDM

回答

1

試試這個

............ 
meaning = meaning.replaceAll("\\s+", " "); 

/*compare the given input with the meaning of the read line */ 
if(meaning.equalsIgnoreCase(f_msg3)) { 
    txtView.setText(f_msg3); 
} else { 
    txtView.setText(f_msg); 
} 
............ 

否則評論else部分,那麼它會工作。

1

我沒有看到你的代碼中的任何明顯的錯誤,也許它只是比較前清潔串(即除去標題和結尾的空格,換行等)的問題 。 嘗試修剪meaning,例如像這樣:

... 
String meaning = tokens.nextToken(); 

if(meaning != null) { 
    meaning = meaning.trim(); 
} 

if(f_msg3.equalsIgnoreCase(meaning)) { 
    txtView.setText(f_msg3); 
} else { 
    txtView.setText(f_msg); 
} 
... 
1

一個StringTokenizer的照顧號(事業,爲你的錯誤)等「令牌」 - 所以可以考慮調用太多的複雜性。

String[] pair = line.split("\\s*\\:\\s*", 2); 
if (pair.length == 2) { 
    String word = pair[0]; 
    String meaning = pair[1]; 
    ... 
} 

這將使用正則表達式將行分成最多2個部分(第二個可選參數)。 \s*代表任何空格:製表符和空格。


您也可以加載所有屬性。在屬性文件中,格式key=value是約定,但也允許key:value。然而,可能需要一些轉義。

0

ArrayList vals = new ArrayList();

String jmeno = "Adam"; 

    vals.add("Honza"); 
    vals.add("Petr"); 
    vals.add("Jan"); 


     if(!(vals.contains(jmeno))){ 
      vals.add(jmeno); 
     }else{ 
      System.out.println("Adam je už v seznamu"); 
     } 


     for (String jmena : vals){ 
      System.out.println(jmena); 
     } 


     try (BufferedReader br = new BufferedReader(new FileReader("dokument.txt"))) 
    { 

     String aktualni = br.readLine(); 
     int pocetPruchodu = 0; 
     while (aktualni != null) 
     { 
      String[] znak = aktualni.split(";"); 
      System.out.println(znak[pocetPruchodu] + " " +znak[pocetPruchodu + 1]); 
      aktualni = br.readLine(); 
     } 
     br.close(); 
    } 
    catch (IOException e) 
    { 
      System.out.println("Nezdařilo se"); 
    } 

     try (BufferedWriter bw = new BufferedWriter(new FileWriter("dokument2.txt"))) 
    { 


     int pocetpr = 0; 
     while (pocetpr < vals.size()) 
     { 

       bw.write(vals.get(pocetpr)); 
       bw.append(" "); 

      pocetpr++; 
     } 
     bw.close(); 
    } 
    catch (IOException e) 
    { 
      System.out.println("Nezdařilo se"); 
    } 
+0

這是回答這個問題嗎?通常最好是解釋代碼,以及它如何與問題相關/提供解決方案。也許你可以編輯和擴展? –