Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中读取行的第一个元素/术语?_Java_String_Bufferedreader_Stringbuilder_Stringbuffer - Fatal编程技术网

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

如何在Java中读取行的第一个元素/术语?,java,string,bufferedreader,stringbuilder,stringbuffer,Java,String,Bufferedreader,Stringbuilder,Stringbuffer,我的目标是从给定的输入文件中读取每行的第一个元素/术语,然后根据第一个元素是什么来决定要做什么(使用if-else构造)。也就是说,如果第一个元素/单词恰好是“”(如下面代码中所述),那么我必须跳过该行并移到下一行 到目前为止,我已经编写了以下代码,但我不确定如何只读取作为输入传递的文本文件每行的第一个元素 public static void main(String[] args) { BufferedReader br = null; try { Strin

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

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

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();

        }
    }

}

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

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());    

}
...

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
,则单词
在那里
它们的
也会返回
true
,这可能会破坏您的代码

从现在开始,尝试使用
split()
而不是
StringTokenizer

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

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

  • 您可以读取整行数据,然后使用
    String.startsWith(…)
    方法测试第一个单词。使用这种方法,如果只想跳过行的其余部分,就不会标记所有数据。然后,如果要继续处理,可以使用
    String.substring(…)
    方法从该行获取其余数据

  • 您可以使用
    扫描仪
    类。
    扫描仪
    允许您在从文件读取数据时标记输入。因此,您可以读取第一个字,然后确定是跳过数据的其余部分,还是读取行的其余部分


  • 下面是将打印为输出的简单代码。您可以使用它,而无需创建额外的数组或使用StringTokenizer

    String s = "The a an the abcdef.";
    System.out.println(s.contains(" ") ? s.substring(0, s.indexOf(" ")) : s);
    

    你让它工作了吗?是的。它确实奏效了。谢谢。@shashank2493,
    是的。它确实有效
    ,然后不要忘记通过单击复选标记来“接受”启发您的解决方案的答案,这样人们就知道问题已经解决。但是
    String.startsWith(…)
    如果第一个单词在那里,
    它们的
    等,则不起作用。。我认为您错过了这一切-您在测试字符串中包含了结尾空格。ie
    startsWidth(“the”)
    我想我错过了它。@SkrewEverything,尽管我猜每行上可能只有一个标记,在这种情况下也不会起作用:)正如我所说的,解决方案取决于确切的需求。(1+)好的解决方案不会每次都自动标记整行。(尽管如果一行中只有一个单词,它也会有我提到的同样的问题)。@camickr-我错过了这一点。检查更新的条件。这肯定会解决这个问题。是的,这正是我要建议的。它得到了我的支持,因为我不认为有必要仅仅为了检查行中的第一个单词而标记整个行。