如何在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(…)
如果第一个单词在那里,它们的
等,则不起作用。。我认为您错过了这一切-您在测试字符串中包含了结尾空格。iestartsWidth(“the”)
我想我错过了它。@SkrewEverything,尽管我猜每行上可能只有一个标记,在这种情况下也不会起作用:)正如我所说的,解决方案取决于确切的需求。(1+)好的解决方案不会每次都自动标记整行。(尽管如果一行中只有一个单词,它也会有我提到的同样的问题)。@camickr-我错过了这一点。检查更新的条件。这肯定会解决这个问题。是的,这正是我要建议的。它得到了我的支持,因为我不认为有必要仅仅为了检查行中的第一个单词而标记整个行。