用分隔符读取大文本文件

v9tzhpje  于 2021-07-13  发布在  Java
关注(0)|答案(6)|浏览(385)

我试图读取一个大的文本文件,格式如下:

datadfqsjmqfqs+dataqfsdqjsdgjheqf+qsdfklmhvqziolkdsfnqsdfmqdsnfqsdf+qsjfqsdfmsqdjkgfqdsfqdfsqdfqdfssdqdsfqdfsqdsfqdfsqdfs+qsfddkmgqjshfdfhsqdflmlkqsdfqdqdf+

我想把文本文件中的这个字符串作为一个大的java字符串来读取。这可能吗?我知道分裂法的用法。
逐行阅读是有效的,但我真正需要的是在“+”号处拆分这个长文本字符串。之后我想把它存储为一个数组,arraylist,list,。。。
有人能帮我吗?因为互联网上的每一条信息都只是逐行读取一个文件。提前谢谢!

exdqitrt

exdqitrt1#

您可以使用 BufferedReader 或者任何io类。假设你有这个字符串 testing.txt 然后通过读取文件中的每一行,可以用分隔符将其拆分( + ). 迭代数组并打印。

BufferedReader br = null;
    try {
        String sCurrentLine;
        br = new BufferedReader(new FileReader("C:\\testing.txt"));//file name with path
        while ((sCurrentLine = br.readLine()) != null) {
               String[] strArr = sCurrentLine.split("\\+");
               for(String str:strArr){
                    System.out.println(str);
                      }
            }

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (br != null)br.close();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
juzqafwq

juzqafwq2#

String inpStr = "datadfqsjmqfqs+dataqfsdqjsdgjheqf+qsdfklmhvqziolkdsfnqsdfmqdsnfqsdf+qsjfqsdfmsqdjkgfqdsfqdfsqdfqdfssdqdsfqdfsqdsfqdfsqdfs+qsfddkmgqjshfdfhsqdflmlkqsdfqdqdf+";

String[] inpStrArr = inpStr.split("+");

希望这是你需要的。

ghg1uchk

ghg1uchk3#

在我看来,你的问题是你不想逐行阅读文件。因此,试着把它分成几个部分来读(比如说每次读20个字符,然后构建你的字符串):

char[] c = new char[20]; //best to save 20 as a final static somewhere

ArrayList<String> strings = new ArrayList<String>();
StringBuilder sb = new StringBuilder();

BufferedReader br = new BufferedReader(new FileReader(filename));

while (br.read(c) == 20) {

    String str = new String(c);

    if (str.contains("+") {

        String[] parts = str.split("\\+");
        sb.append(parts[0]);
        strings.add(sb.toString());

        //init new StringBuilder:
        sb = new StringBuilder();
        sb.add(parts[1]);

    } else {
        sb.append(str);
    }
}
oyxsuwqo

oyxsuwqo4#

您应该能够获得一个长度为integer.max\的字符串值(根据java规范,总是2147483647(231-1),字符串类用于内部存储的最大数组大小)或最大堆大小的一半(因为每个字符是两个字节),以较小的为准
一个java字符串可以有多少个字符?

mkh04yzy

mkh04yzy5#

试试这个:

private static void readLongString(File file){
    ArrayList<String> list = new ArrayList<String>();
    StringBuilder builder = new StringBuilder();
    int r;
    try{
        InputStream in = new FileInputStream(file);
        Reader reader = new InputStreamReader(in);
            while ((r = reader.read()) != -1) {
                if(r=='+'){
                    list.add(builder.toString());
                    builder = new StringBuilder();
                }
                builder.append(r);
            }
    }catch (IOException ex){
        ex.printStackTrace();
    }
    for(String a: list){
        System.out.println(a);
    }
}
i7uaboj4

i7uaboj46#

这里有一种方法,需要注意的是不能加载超过max int size(大约1 gb)的文件

FileReader fr=null;
  try {
      File f=new File("your_file_path");
      fr=new FileReader(f);
      char[] chars=new char[(int)f.length()];
      fr.read(chars);
      String s=new String(chars);
      //parse your string here
  } catch (Exception e) {
      e.printStackTrace();
  }finally {
      if(fr!=null){
          try {
              fr.close();
          } catch (IOException e) {

          }
      }
  }

相关问题