2015-04-28 51 views
1

我试图读取一个大的文本文件的形式:Java的阅读大量文本文件分隔符

datadfqsjmqfqs+dataqfsdqjsdgjheqf+qsdfklmhvqziolkdsfnqsdfmqdsnfqsdf+qsjfqsdfmsqdjkgfqdsfqdfsqdfqdfssdqdsfqdfsqdsfqdfsqdfs+qsfddkmgqjshfdfhsqdflmlkqsdfqdqdf+ 

我想读这个字符串中的文本文件作为一个大的Java字符串。这可能吗?我知道使用拆分方法。

它一行一行地读取它,但我真正需要的是将这个长文本字符串拆分为'+'号。之后我想将它作为数组,数组列表,列表存储...

任何人都可以帮助我吗?因为互联网上的每一条信息都是关于逐行阅读文件的。 在此先感谢!

+1

这里是你的问题的答案:http://stackoverflow.com/questions/3481828/如何在Java中拆分字符串 –

回答

2

可以使用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(); 
      } 
     } 
+1

非常感谢!你帮我了。 – ernie379

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

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

希望这是你所需要的。

+0

好的,但是如何读取字符串呢?我认为会有一个溢出 – ernie379

+0

迭代循环并从数组中提取每个元素。 for(int i = 0; i

+0

这将是'inpStr.split(“\\ +”)' – Saravana

2

在我看来,你的问题是你不想逐行阅读文件。因此,相反,尝试在部分(比如每次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); 
    } 
} 
+0

谢谢你archana这是有帮助的。 –

2

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

How many characters can a Java String have?

0

试试这个:

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

这里有一种方法,CAV吃是不能加载超过最大INT规模以上(大约一个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) { 
 

 
      } 
 
     } 
 
    }