【问题标题】:Java Read Text file with conditionJava 读取带有条件的文本文件
【发布时间】:2015-05-24 22:44:52
【问题描述】:

我只是想知道是否有一种方法可以读取文本文件并跳过带有特定字符串的行。

例如(test1.txt):

test0,orig,valid,nice
test1,input,of,ol,[www]
test2,[eee],oa,oq
test3,wa,eee,string,int
test4,asfd,eee,[tsddas],wwww

预期输出:

test0,orig,valid,nice
test3,wa,eee,string,int

我已经有了这个代码:

String line;
String test[];

try{
    LineIterator it = FileUtils.lineIterator(file2,"UTF-8");
    while(it.hasNext()){                    
        line = it.nextLine();                    
        test = StringUtils.split(line,(",")); 
    }

提前谢谢各位!

【问题讨论】:

  • 除了添加if 声明之外的其他方式?
  • 如果您正在阅读csv,您可能需要使用csv 解析器。

标签: java split bufferedreader


【解决方案1】:

类似:

line = it.nextLine();

if (line.contains("specific string")) continue;

test = StringUtils.split(line,(",")); 

你为什么使用 StringUtils 来分割一行? String 类支持 split(...) 方法。

我建议您阅读 String API 以了解基本功能。

【讨论】:

  • 我正在使用 StringUtils 来加快阅读速度,因为我正在阅读一百万行文本。那么如何删除包含“[”的行。
  • 哦,天哪,我现在知道如何删除线了。谢谢这个!
  • I'm using StringUtils for faster reading, - StringUtils 没有读取数据。它正在拆分数据。我不知道 StringUtils 是否比 String.split() 方法快,但为了速度,您应该查看StringTokenizer。它很快,因为它非常简单。
【解决方案2】:

您还可以使用 Java 8 Streaming API。它让这一切变得相当容易。

final List<String[]> rows = Files.lines(Paths.get(file2), "UTF-8")
        .filter(l -> !l.contains("["))
        .map(l -> l.split(","))
        .collect(Collectors.toList());

如果您想快速完成并且不想遇到任何问题,您还应该考虑使用现有的 CSV 库。一个很好的例子是 Apache Commons CSV 库 (https://commons.apache.org/proper/commons-csv/)。

【讨论】:

    猜你喜欢
    • 2015-07-29
    • 1970-01-01
    • 2015-07-07
    • 2015-01-15
    • 1970-01-01
    • 1970-01-01
    • 2016-08-08
    • 1970-01-01
    • 2021-03-10
    相关资源
    最近更新 更多