如何从文本文件Java中读取单个单词(或行)?

就像标题所说,我试图编写一个程序,可以从文本文件中读取单个单词并将它们存储到String变量中。 我知道如何使用FileReaderFileInputStream来读取单个char但是我正在尝试这个不会工作。 一旦我输入单词,我试图将这些与我的程序中的其他String变量进行比较,使用.equals,这样我最好能够导入为Strings。 我也可以将文本文件中的整行输入为String,在这种情况下,我只在文件的每一行放一个单词。 如何从文本文件中输入单词并将其存储到String变量中?

编辑:好的,那种重复的帮助。 它可能适合我,但我的问题有点不同的原因是因为副本只告诉如何读取单行。 我试图阅读该行中的单个单词。 所以基本上拆分线String。

要从文本文件中读取行,您可以使用它(使用try-with-resources):

 String line; try ( InputStream fis = new FileInputStream("the_file_name"); InputStreamReader isr = new InputStreamReader(fis, Charset.forName("UTF-8")); BufferedReader br = new BufferedReader(isr); ) { while ((line = br.readLine()) != null) { // Do your thing with line } } 

要将一行分为单个单词,可以使用String.split :

 while ((line = br.readLine()) != null) { String[] words = line.split(" "); // Now you have a String array containing each word in the current line } 

这些都是非常复杂的答案。 我相信它们都很有用。 但我更喜欢优雅简单的 Scanner

 public static void main(String[] args) throws Exception{ Scanner sc = new Scanner(new File("fileName.txt")); while(sc.hasNext()){ String s = sc.next(); //..... } } 

你必须使用StringTokenizer! 这里有一个示例并读取此String Tokenizer

 private BufferedReader innerReader; public void loadFile(Reader reader) throws IOException { if(reader == null) { throw new IllegalArgumentException("Reader not valid!"); } this.innerReader = new BufferedReader(reader); String line; try { while((line = innerReader.readLine()) != null) { if (line == null || line.trim().isEmpty()) throw new IllegalArgumentException( "line empty"); //StringTokenizer use delimiter for split string StringTokenizer tokenizer = new StringTokenizer(line, ","); //delimiter is "," if (tokenizer.countTokens() < 4) throw new IllegalArgumentException( "Token number not valid (<= 4)"); //You can change the delimiter if necessary, string example /* Hello / bye , hi */ //reads up "/" String hello = tokenizer.nextToken("/").trim(); //reads up "," String bye = tokenizer.nextToken(",").trim(); //reads up to end of line String hi = tokenizer.nextToken("\n\r").trim(); //if you have to read but do not know if there will be a next token do this while(tokenizer.hasMoreTokens()) { String mayBe = tokenizer.nextToken("."); } } } catch (Exception e) { throw new IllegalArgumentException(e); } } 

在java8中,您可以执行以下操作:

 import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; public class Foo { public List readFileIntoListOfWords() { try { return Files.readAllLines(Paths.get("somefile.txt")) .stream() .map(l -> l.split(" ")) .flatMap(Arrays::stream) .collect(Collectors.toList()); } catch (IOException e) { e.printStackTrace(); } return Collections.emptyList(); } } 

虽然我怀疑可能需要改变分裂的论点,例如从一个单词的末尾修饰标点符号