从具有条件的文本文件中读取

时间:2015-05-17 17:27:49

标签: java arrays string file bufferedreader

我正在读取一个文本文件,条件是要忽略以*开头的单词。

example:
abc 1234 *text to be ignored

所以在这个例子中,当从文本文件中读取时,我将忽略“要忽略的文本”,并且只在字符串数组中存储abc和1234。

为此,我写了下面的代码。如何实现忽略以*?

开头的单词的条件
public static void read(String filename) {
        BufferedReader reader = null;

        try {
            String line;
            reader = new BufferedReader (new FileReader(filename));
            while ((line = reader.readLine()) != null) {
                String[] functionName = line.split("\\s+");         
                            }
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            if (reader != null)
                try {
                    reader.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
        }
    }

5 个答案:

答案 0 :(得分:3)

如果您的String以给定的字符串文字开头,则

startWith(String literal)返回true。

例如:

"1234".startsWith("12");返回true

所以你应该阅读所有单词并检查它是否开始甚至包含*,如果是,则忽略整个单词。

示例:

if(! word.startsWith("*")) {
// add to what ever you want
}

if(! word.contains("*")) {
// add to what ever you want
}

答案 1 :(得分:1)

您可以尝试indexOf()substring()一样

 while ((line = reader.readLine()) != null) {
    if(line.indexOf("*")>-1)
    line=line.substring(0,line.indexOf("*"));
    String[] functionName = line.split("\\s+");  
 }

以上indexOf("*")会为您提供*的索引,然后您可以找到带有endIndex的子字符串作为*的索引indexOf("*") substring(beginIndex,endIndex) 1}}通过while ((line = reader.readLine()) != null) { String[] functionName = line.split("\\s+"); String newLine = ""; for(String strg : functionName){ if(strg.startsWith("*")){ break; }else{ newLine = strg + newLine; } } }

答案 2 :(得分:1)

您可以在while循环中执行某些操作 -

new scene.addEventHandler(KeyEvent. KEY_PRESSED, ( key) -> {

答案 3 :(得分:1)

你不知道你正在使用什么版本的Java,所以我将假设Java 8 ......

注意:代码未经测试,但应该可以进行一些调整。

td

答案 4 :(得分:1)

如果您不想循环检查单词以检查它是否以*开头,您还可以在使用split之前删除所有带有星号的单词。

String str = "abc 1234 *text to be ignored";
System.out.println(Arrays.toString(str.replaceAll("\\*[^\\s]+\\s*", "").split("\\s+")));
// [abc, 1234, to, be, ignored]
str = "*abc *1234 *text to be *ignored";
System.out.println(Arrays.toString(str.replaceAll("\\*[^\\s]+\\s*", "").split("\\s+")));
// [to, be]

正则表达式分解

\\* - Literal match of asterisk
[^\\s]+ - Match anything but a space
\\s* - Capture any or no spaces at end of word