Java使用分隔符读取大文本文件

我正在尝试以下列forms阅读大型文本文件:

datadfqsjmqfqs+dataqfsdqjsdgjheqf+qsdfklmhvqziolkdsfnqsdfmqdsnfqsdf+qsjfqsdfmsqdjkgfqdsfqdfsqdfqdfssdqdsfqdfsqdsfqdfsqdfs+qsfddkmgqjshfdfhsqdflmlkqsdfqdqdf+ 

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

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

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

您可以使用BufferedReader或任何IO-classes读取文件testing.txt假设您在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(); } } 
 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 strings = new ArrayList(); 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); } } 

您应该能够获得一个长度为Integer.MAX_VALUE的字符串(Java规范始终为2147483647(231-1),数组的最大大小,String类用于内部存储)或最大堆大小的一半(从每个字符都是两个字节),以较小者为准

Java String有多少个字符?

试试这个:

 private static void readLongString(File file){ ArrayList list = new ArrayList(); 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) { } } }