如何在Java中读取一行的第一个元素/术语?

时间:2016-11-19 16:04:03

标签: java string bufferedreader stringbuilder stringbuffer

我的目标是从给定的输入文件中读取每一行的第一个元素/术语,然后根据第一个元素决定做什么(使用if-else构造)。即如果第一个元素/单词恰好是"the"(如下面的代码中所述),那么我必须跳过该行并移动到下一行。

到目前为止我编写了以下代码,但我不确定如何只读取我作为输入传递的文本文件的每一行的第一个元素。

public static void main(String[] args) {

    BufferedReader br = null;
    try {
        String line;
        br = new BufferedReader(new FileReader("input.txt"));
        while ((line = br.readLine()) != null) {
            System.out.println(line);
            StringTokenizer stringTokenizer = new StringTokenizer(line, " ");
            while (stringTokenizer.hasMoreTokens()) {

                String term  = stringTokenizer.nextElement().toString();
                if (term.equals("the")) {
                    //Code on what to do depending on the first character of each line. 
                }
                StringBuilder sb = new StringBuilder();
                System.out.println(sb.toString());    

            }

        } 

        System.out.println("Done!");

    }

    catch (IOException e)
    {
        e.printStackTrace();

    }

    finally {

        try {

           if (br != null)
               br.close();

        }

        catch(IOException ex) {

            ex.printStackTrace();

        }
    }

}

4 个答案:

答案 0 :(得分:1)

下面是打印String s = "The a an the abcdef."; System.out.println(s.contains(" ") ? s.substring(0, s.indexOf(" ")) : s); 作为输出的简单代码。你可以使用它,不需要创建额外的数组或使用StringTokenizer。

#define foo bar
...
int foo, bar;  // error: preprocessing turns this into int bar, bar;

答案 1 :(得分:0)

您可以通过以下方式将每个字词转换为单词数组:

while((line = br.readLine()) != null){
    System.out.println(line);
    String word = line.split("\\s+")[0];
    if(word.equals("the")){
                //Code on what to do depending on the first character of each line. 
    }
    StringBuilder sb = new StringBuilder();
    System.out.println(sb.toString());    

}
...

答案 2 :(得分:0)

StringTokenizer被视为遗产类。它只是为了向后兼容。在字符串上使用split()将单个字符串拆分为字符串/单词数组。

String[] s = line.readLine().split(" ");
String firstWord = s[0]; // ->First word

因此您的代码可以编辑为

public static void main(String[] args) 
    {

        BufferedReader br = null;

        try
        {
            String line;

            br = new BufferedReader(new FileReader("input.txt"));

            while((line = br.readLine()) != null)
            {

                System.out.println(line);

                String s = line.split(" "); // instead of StringTokenizer


                    if(s[0].equals("the"))
                    {
                        //Code on what to do depending on the first character of each line. 
                    }
                    StringBuilder sb = new StringBuilder();
                    System.out.println(sb.toString());    


            } 

            System.out.println("Done!");

        }

        catch(IOException e)
        {

            e.printStackTrace();

        }

        finally
        {

            try
            {

                if (br != null)
                br.close();

            }

            catch(IOException ex)
            {

                ex.printStackTrace();

            }
        }

    }

注意:

不要使用startsWith(...)来检查第一个单词,因为它是按字符而不是按字词进行检查。如果您要检查单词the,则单词theretheir也会返回true,这可能会破坏您的代码。

从现在开始尝试使用split()代替StringTokenizer

答案 3 :(得分:0)

  

但我不确定如何只读取我作为输入传递的文本文件的每一行的第一个元素。

根据您的具体要求,有几种不同的解决方案。

  1. 您可以阅读整行数据,然后使用String.startsWith(...)方法测试第一个单词。如果您只想跳过剩下的行,则使用此方法不会对所有数据进行标记。然后,如果您想继续处理,可以使用String.substring(...)方法从该行获取其余数据。

  2. 您可以使用Scanner课程。 Scanner允许您在从文件中读取数据时对输入进行标记。因此,您可以阅读第一个单词,然后确定是否跳过剩余的数据或阅读其余部分。