将文本文件中的唯一单词添加到 ArrayList 的程序
Program that adds unique words from text file to an ArrayList
我正在编写一个程序,该程序读取包含多行文本的文本文件并将唯一的单词添加到 ArrayList。然后,我需要对这个 ArrayList 进行排序并打印它。
我的输入是:
Hello my
my name is
Java.
我最初认为我的问题是一旦扫描器命中一个已经在 ArrayList 中的单词,它就停止了。但是,在更改输入后,我不知道我的问题是什么了。
我现在的输出是:
There are 2 unique word(s)
These words are:
is
my
我需要我的输出是:
There are 5 unique word(s)
These words are:
Hello
Java
is
my
name
这是我的代码:
import java.util.*;
import java.io.*;
public class Indexer
{
public static void main(String[] args) throws FileNotFoundException
{
Scanner fileScanner = new Scanner(new File("File.txt"));
fileScanner.useDelimiter("[^A-Za-z0-9]");
ArrayList<String> words = new ArrayList<String>();
while (fileScanner.hasNext())
{
if (!words.contains(fileScanner.next()) && (fileScanner.hasNext()))
{
words.add(fileScanner.next());
}
}
Collections.sort(words);
System.out.println("There are " + words.size() + " unique word(s)");
System.out.println("These words are:");
for (Iterator<String> it = words.iterator(); it.hasNext();)
{
String f = it.next();
System.out.println(f);
}
fileScanner.close();
}
}
我做错了什么?
首先不要在循环内调用 scanner.next() 两次
ArrayList<String> words = new ArrayList<String>();
while (fileScanner.hasNext())
{
String word = fileScanner.next();
if (!words.contains(word))
{
words.add(word);
}
}
您重复使用 next()
,超出了应有的使用范围。将 next()
调用的值收集到一个变量中,然后改用它。例如
while (fileScanner.hasNext())
{
String nextWord = fileScanner.next();
if (!words.contains(nextWord))
{
words.add(nextWord);
}
}
问题出在这里:
if (!words.contains(fileScanner.next()) && (fileScanner.hasNext()))
{
words.add(fileScanner.next());
}
每次调用 next()
都会读取另一个单词。所以在上面的代码中,您正在读取和测试一个单词,然后读取并添加下一个单词。这是不正确的。你不想扔掉的话...
提示:使用局部变量来保存您刚刚阅读的单词...
我正在编写一个程序,该程序读取包含多行文本的文本文件并将唯一的单词添加到 ArrayList。然后,我需要对这个 ArrayList 进行排序并打印它。 我的输入是:
Hello my
my name is
Java.
我最初认为我的问题是一旦扫描器命中一个已经在 ArrayList 中的单词,它就停止了。但是,在更改输入后,我不知道我的问题是什么了。 我现在的输出是:
There are 2 unique word(s)
These words are:
is
my
我需要我的输出是:
There are 5 unique word(s)
These words are:
Hello
Java
is
my
name
这是我的代码:
import java.util.*;
import java.io.*;
public class Indexer
{
public static void main(String[] args) throws FileNotFoundException
{
Scanner fileScanner = new Scanner(new File("File.txt"));
fileScanner.useDelimiter("[^A-Za-z0-9]");
ArrayList<String> words = new ArrayList<String>();
while (fileScanner.hasNext())
{
if (!words.contains(fileScanner.next()) && (fileScanner.hasNext()))
{
words.add(fileScanner.next());
}
}
Collections.sort(words);
System.out.println("There are " + words.size() + " unique word(s)");
System.out.println("These words are:");
for (Iterator<String> it = words.iterator(); it.hasNext();)
{
String f = it.next();
System.out.println(f);
}
fileScanner.close();
}
}
我做错了什么?
首先不要在循环内调用 scanner.next() 两次
ArrayList<String> words = new ArrayList<String>();
while (fileScanner.hasNext())
{
String word = fileScanner.next();
if (!words.contains(word))
{
words.add(word);
}
}
您重复使用 next()
,超出了应有的使用范围。将 next()
调用的值收集到一个变量中,然后改用它。例如
while (fileScanner.hasNext())
{
String nextWord = fileScanner.next();
if (!words.contains(nextWord))
{
words.add(nextWord);
}
}
问题出在这里:
if (!words.contains(fileScanner.next()) && (fileScanner.hasNext()))
{
words.add(fileScanner.next());
}
每次调用 next()
都会读取另一个单词。所以在上面的代码中,您正在读取和测试一个单词,然后读取并添加下一个单词。这是不正确的。你不想扔掉的话...
提示:使用局部变量来保存您刚刚阅读的单词...