Java 读取带分隔符的大文本文件

Java read large text file with separator

我正在尝试读取以下格式的大型文本文件:

datadfqsjmqfqs+dataqfsdqjsdgjheqf+qsdfklmhvqziolkdsfnqsdfmqdsnfqsdf+qsjfqsdfmsqdjkgfqdsfqdfsqdfqdfssdqdsfqdfsqdsfqdfsqdfs+qsfddkmgqjshfdfhsqdflmlkqsdfqdqdf+

我想在文本文件中读取这个字符串作为一个大 java 字符串。这可能吗?我知道split方法的用法

它可以逐行阅读它,但我真正需要的是在“+”号处拆分这个长文本字符串。之后我想将它存储为数组、arraylist、list、...

谁能帮我解决这个问题?因为互联网上的所有信息都只是逐行读取文件。 提前致谢!

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

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

希望这是你需要的。

在我看来你的问题是你不想逐行读取文件。因此,请尝试分段阅读(每次说 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);
    }
}

您可以使用 BufferedReader 或任何 IO-classes.suppose 读取文件,您在 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();
            }
        }

根据Java规范,你应该能够得到一个长度为Integer.MAX_VALUE的字符串(总是2147483647(231 - 1),数组的最大大小,其中字符串class 用于内部存储)或最大堆大小的一半(因为每个字符都是两个字节),以较小者为准

How many characters can a Java String have?

试试这个:

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

这是一种方法,请注意您不能加载超过最大 int 大小(大约 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) {

          }
      }
  }