How to read a single word (or line) from a text file Java?

后端 未结 4 2090
不思量自难忘°
不思量自难忘° 2021-01-13 13:25

Like the title says, im trying to write a program that can read individual words from a text file and store them to String variables. I know how to use a

相关标签:
4条回答
  • 2021-01-13 13:50

    In java8 you can do something like the following:

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

    Though I suspect that the argument to split may need to be changed, eg to trim punctuation from the end of a word

    0 讨论(0)
  • 2021-01-13 13:53

    To read lines from a text file, you can use this (uses 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
        }
    }
    

    More compact, less-readable version of the same thing:

    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
        }
    }
    

    To chunk a line into individual words, you can use String.split:

    while ((line = br.readLine()) != null) {
        String[] words = line.split(" ");
        // Now you have a String array containing each word in the current line
    }
    
    0 讨论(0)
  • 2021-01-13 13:55

    You must use StringTokenizer! here an example and read this 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);
        }
    }
    
    0 讨论(0)
  • 2021-01-13 14:08

    These are all really complex answers. And I am sure they are all useful. But I prefer the elegantly simple Scanner :

    public static void main(String[] args) throws Exception{
        Scanner sc = new Scanner(new File("fileName.txt"));
        while(sc.hasNext()){
            String s = sc.next();
            //.....
        }
    }
    
    0 讨论(0)
提交回复
热议问题