2016-11-07 107 views
0

我有格式的这个文本文件:分割文本文件

Token:A1 
sometext 
Token:A2 
sometext 
Token:A3 

我想分裂这个文件分成多个文件,这样 文件1包含

A1 
sometext 

文件2包含

A2 
sometext 

我对任何编程或脚本语言都没有太多的想法,最好是什么该怎么办?我正在考虑使用Java来解决问题。

+0

[String.split](https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#split-java.lang.String-)(“Token:”) ?给你一个字符串[]与“A1 sometext”,“A2 sometext”... – Fildor

+0

是否“sometext”保证不包含“令牌:”? – Fildor

回答

0

没有最好的办法,它取决于你的环境和实际需要。但是,对于任何语言都能找出您的基本算法,并尝试使用最佳可用数据结构。如果您使用的是Java,请考虑使用guava splitter并查看它的实现。

1

如果你想使用java,我会考虑使用ScannerFilePrintWriter与for循环和一些异常处理,你会很好去。

导入适当的库!

import java.io.*; 
import java.util.*; 

声明类课程

public class someClass{ 

    public static void main(String [] args){ 

现在这里是哪里的东西开始变得有趣了。我们使用类File来创建一个新文件,该文件将要读取的文件的名称作为参数传递。你可以把你想要的任何东西放在文件的路径中,也可以放在与你的代码相同的目录下的文件名。

 File currentFile = new File("new.txt"); 
     if (currentFile.exists() && currentFile.canRead()){ 
      try{ 

接下来我们通过新创建的文件对象创建一个扫描仪扫描。只要文件有新的令牌可以扫描,for循环就会继续。 .hasNext()仅当扫描器中的输入具有其他标记时才返回true。 PrintWriter写入并创建文件。我已经设置它会创建基于循环迭代(0,1,2,3等)的文件,但可以轻松更改。 (见new PrintWriter(i + ".txt". UTF-8);

  Scanner textContents = new Scanner(currentFile); 
       for(int i = 0; textContents.hasNext(); i++){ 
        PrintWriter writer = new PrintWriter(i + ".txt", "UTF-8"); 
        writer.println(textContents.next()); 
        writer.close(); 
       } 

这些catch语句是超级重要!没有它们,你的代码甚至不会编译。如果出现错误,他们将确保您的代码不会崩溃。我把它们的内部留空,以便你可以做你认为合适的事情。

  } catch (FileNotFoundException e) { 
       // do something 
      } 
      catch (UnsupportedEncodingException i){ 
       //do something 
      } 

     } 
    } 
} 

和那差不多它!如果您有任何问题,请务必发表评论!