Buffer Reader 读取输入文件的代码

Buffer Reader code to read input file

我有一个名为 "message.txt" 的文本文件,它是使用缓冲区 Reader 读取的。文本文件的每一行都包含 "word" 和 "meaning",如本例所示:

"PS:Primary school"

其中PS - 单词,小学 - 意思

当文件被读取时,每一行都从“:”标记为 "word" 和 "meaning"。 如果 "meaning" 等于给定的名为 "f_msg3" 的输入字符串,则 "f_msg3" 将显示在名为 "txtView" 的文本视图上。否则,它会在文本视图中显示 "f_msg"。

但是 "if condition" 在此代码中无法正常工作。例如,如果 "f_msg3" 等于 "Primary school",文本视图的输出必须是 "Primary school"。但它给出的输出为 "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");
}

我在你的代码中没有看到任何明显的错误,也许这只是一个问题 在比较之前清理字符串(即删除标题和尾随空格、换行符等)。 尝试修剪 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);
}
...

StringTokenizer 会处理数字(导致错误的原因)和其他 "tokens" - 因此可能会被认为调用了太多的复杂性。

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 也是允许的。然而,可能需要一些转义。

试试这个

............
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部分即可。

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");
    }