Java将文件读入列表

时间:2018-06-20 18:31:35

标签: java list input delimiter

我需要找出一种方法,将输入文件转换为由多个字符(或更具体地说,句号和感叹号(!或。))分隔的句子列表。 / p>

我的输入文件的布局与此类似:

  

示例文本文件!

     

一个人,一个人,一个选票,一个猫薄荷,一个维尼,一个铁轨,一个am蒲,一个奶牛场,一个淡啤酒,一条运河-巴拿马!

     

这是一个句子!这也是。

     

还有另外一个吗?

     

是的。

如何将文件逐句放入列表中?

文件中的每个句子都通过字符完成。

1 个答案:

答案 0 :(得分:0)

有很多方法可以完成您所要的内容,但是这是一种将文件读入程序,并通过特定的分隔符将每一行拆分为一个列表的方法,同时仍将分隔符保留在句子中。

将文件转为基于多个定界符的列表的所有功能都可以在turnSentencesToList()方法中找到

在下面的示例中,我划分为:! 。 ?

import java.io.File;
import java.io.FileNotFoundException;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test{

    public static void main(String [] args){
        LinkedList<String> list = turnSentencesToList("sampleFile.txt");

        for(String s: list)
            System.out.println(s);  
    }

    private static LinkedList<String> turnSentencesToList(String fileName) {
        LinkedList<String> list = new LinkedList<>();
        String regex = "\\.|!|\\?";

        File file = new File(fileName);
        Scanner scan = null;
        try {
            scan = new Scanner(file);
            while(scan.hasNextLine()){
                String line = scan.nextLine().trim();

                String[] sentences = null;
                //we don't need empty lines
                if(!line.equals("")) {
                    //splits by . or ! or ?
                    sentences = line.split("\\.|!|\\?");

                    //gather delims because split() removes them
                    List<String> delims = getDelimiters(line, regex);

                    if(sentences!=null) {
                        int count = 0;
                        for(String s: sentences) {
                            list.add(s.trim()+delims.get(count));
                            count++;
                        }
                    }
                }
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            return null;
        }finally {
            if(scan!=null)
                scan.close();
        }
        return list;
    }


     private static List<String> getDelimiters(String line, String regex) {
         //this method is used to provide a list of all found delimiters in a line
         List<String> allDelims = new LinkedList<String>();
         Pattern pattern = Pattern.compile(regex);
         Matcher matcher = pattern.matcher(line);

         String delim = null;
         while(matcher.find()) {
             delim = matcher.group();
             allDelims.add(delim);
         }

         return allDelims;     
    }
}

根据您的示例输入文件,产生的输出将为:

  

示例文本文件!

     

一个人,我,选票,猫薄荷,小熊维尼,铁轨,cal蒲,奶牛场,棉条,一条运河-巴拿马!

     

这是一个句子!

     

这也是。

     

还有另外一个吗?

     

是的。