Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.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_Text_Io_Text Files_Inputstream - Fatal编程技术网

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

如何从Java文本文件中读取单个单词(或行)?,java,text,io,text-files,inputstream,Java,Text,Io,Text Files,Inputstream,正如标题所说,我正在尝试编写一个程序,可以从文本文件中读取单个单词,并将它们存储到String变量中。我知道如何使用文件读取器或文件输入流读取单个字符,但对于我尝试的内容,这是行不通的。输入单词后,我试图使用.equals将其与程序中的其他字符串变量进行比较,因此最好是作为字符串导入。我也可以将文本文件中的整行作为字符串输入,在这种情况下,我只需在文件的每行上输入一个单词。如何从文本文件中输入单词并将其存储到字符串变量中 编辑: 好吧,这有点帮助。这可能对我有用,但我的问题有点不同的原因是,副本

正如标题所说,我正在尝试编写一个程序,可以从文本文件中读取单个单词,并将它们存储到
String
变量中。我知道如何使用
文件读取器
文件输入流
读取单个
字符
,但对于我尝试的内容,这是行不通的。输入单词后,我试图使用.equals将其与程序中的其他字符串变量进行比较,因此最好是作为字符串导入。我也可以将文本文件中的整行作为字符串输入,在这种情况下,我只需在文件的每行上输入一个单词。如何从文本文件中输入单词并将其存储到字符串变量中

编辑:
好吧,这有点帮助。这可能对我有用,但我的问题有点不同的原因是,副本只告诉我如何阅读一行。我试着读这行中的单个单词。所以基本上是把线串分开

您必须使用StringTokenizer!下面是一个例子,请阅读

private BufferedReader-innerReader;
公共无效加载文件(读卡器)
抛出IOException{
如果(读卡器==null)
{
抛出新的IllegalArgumentException(“读卡器无效!”);
}
this.innerReader=新的BufferedReader(读卡器);
弦线;
尝试
{
而((line=innerReader.readLine())!=null)
{
if(line==null | | line.trim().isEmpty())
抛出新的IllegalArgumentException(
“行空”);
//StringTokenizer对拆分字符串使用分隔符
StringTokenizer tokenizer=新的StringTokenizer(行,“”;//分隔符为“,”
if(tokenizer.countTokens()<4)
抛出新的IllegalArgumentException(

“令牌号无效(要从文本文件中读取行,可以使用此选项(使用try with resources):

相同内容的更紧凑、可读性更低的版本:

String line;

try (BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("the_file_name"), Charset.forName("UTF-8")))) {
    while ((line = br.readLine()) != null) {
        // Do your thing with line
    }
}
要将一行分为单个单词,可以使用:


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

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

在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<String> 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();
    }
}
import java.io.IOException;
导入java.nio.file.Files;
导入java.nio.file.path;
导入java.util.array;
导入java.util.Collections;
导入java.util.List;
导入java.util.stream.collector;
公开课Foo{
公共列表ReadFileInToListoWords(){
试一试{
return Files.readAllLines(path.get(“somefile.txt”))
.stream()
.map(左->左拆分(“”)
.flatMap(数组::流)
.collect(Collectors.toList());
}
捕获(IOE异常){
e、 printStackTrace();
}
返回集合。emptyList();
}
}

尽管我怀疑split的参数可能需要更改,例如从一个单词的末尾删去标点符号

可能与@EricLeibenguth重复,阅读上面的编辑否,不,仔细看看答案:下一行使用
Scanner.nextLine()
,下一行使用
Scanner.next()
下一个单词。好的,谢谢,我可能需要对这个字符串标记器做一些研究,因为我以前从未见过它。几分钟后我会回到问题上来。我做了更多的修改,希望你能帮到我。谢谢你的回答@Michelacorte。这很好,我会灵巧地对此进行研究,但现在我会继续swer更符合我的要求,对我来说更容易理解(我还不是很好LOL)好的,谢谢!这正是我想要的。是的,巧妙地同意,它们对我来说相当复杂。我基本上使用了标记重复问题的答案和@spork的答案的混合。不过谢谢你的回答!
while ((line = br.readLine()) != null) {
    String[] words = line.split(" ");
    // Now you have a String array containing each word in the current line
}
public static void main(String[] args) throws Exception{
    Scanner sc = new Scanner(new File("fileName.txt"));
    while(sc.hasNext()){
        String s = sc.next();
        //.....
    }
}
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<String> 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();
    }
}