2012-04-04 80 views
13

我目前正在学习Java,并且遇到了这个问题,我想加载一个包含大量行的文件(我正在逐行读取文件),而我想要做的事情是跳过某些行(伪-码)。如何从java中的文本文件跳过某些行?

the line thats starts with (specific word such as "ABC") 

我曾尝试使用

if(line.startwith("abc")) 

但没有奏效。我不知道如果我做错了,这就是为什么我在这里寻求帮助,下面的负载功能的一部分:

public String loadfile(.........){ 

//here goes the variables 

try { 

     File data= new File(dataFile); 
     if (data.exists()) { 
      br = new BufferedReader(new FileReader(dataFile)); 
      while ((thisLine = br.readLine()) != null) {       
       if (thisLine.length() > 0) { 
        tmpLine = thisLine.toString(); 
        tmpLine2 = tmpLine.split(......); 
        [...] 
+0

+1。不知道为什么这被拒绝,但回到0. – Neil 2012-04-04 09:04:44

+0

-1与java-ee servlets或jsp无关以及已被删除的帖子的副本 – 2012-04-04 09:04:48

+2

+1不确定是否投弃权票。如果有错误的标签,只需纠正它们... – devsnd 2012-04-04 09:05:31

回答

9

尝试

if (line.toUpperCase().startsWith(­"ABC")){ 
    //skip line 
} else { 
    //do something 
} 

这将line全部转换为通过使用功能toUpperCase()上字符并将检查字符串是否以ABC开头。

如果它是true那么它什么都不做(跳过线)并进入else部分。

您还可以使用startsWithIgnoreCase,这是Apache Commons提供的功能。它需要两个字符串参数。

public static boolean startsWithIgnoreCase(String str, 
              String prefix) 

此函数返回布尔值。 并检查一个字符串是否以指定的前缀开头。

如果字符串以前缀开头,则它返回true,不区分大小写。

+0

这。不知道他是否给了我们快速的psuedocode,或者实际上他在做什么,但是'startwith'和'startsWith'不一样,'abc'和ABC不一样 – Nicholas 2012-04-04 14:37:05

2

如果情况是不使用的重要尝试StringUtils.startsWithIgnoreCase(String str, String prefix)Apache Commons

This function return boolean. 

See javadoc here

用法:

if (StringUtils.startsWithIgnoreCase(­line, "abc")){ 
    //skip line 
} else { 
    //do something 
} 
+0

看起来像'one -liner'由vikiii发布。 – 2012-04-04 09:18:20

+1

非常真实。 我认为新手Java程序员尽快学习Apache Commons库非常重要,所以他们不会重写常用实用程序。 – 2012-04-04 09:20:54

+0

在完成了几次之后,我现在看到了你的观点。 – 2012-04-04 09:27:51

1

如果你有一个大的输入文件,你的代码将创建一个OutOfMemoryError。如果没有编辑代码,就无法对付它(如果文件变大,添加更多内存将失败)。

我说你把选定的行存储在内存中。如果文件变大(2GB左右),则内存容量将达到4GB。 (String的旧值和新值)。

你必须使用流来解决这个问题。

创建一个FileOutpuStream,并将选定的行写入该流中。

您的方法必须更改。对于较大的输入哟不能返回一个字符串:

public String loadfile(...){ 

您可以返回Stream或文件。

public MyDeletingLineBufferedReader loadFile(...) 
0

你可以使用:

BufferedReader br = new BufferedReader(new FileReader("file.txt")); 
    String lineString; 
    try{ 
    while((lineString = br.readLine()) != null) { 
     if (lineString.toUpperCase().startsWith(­"abc")){ 
      //skip 
      } else { 
      //do something 
      } 
     } 
    } 

static boolean startsWithIgnoreCase(String str, String prefix)方法org.apache.commons.lang.StringUtils像下面。

BufferedReader br = new BufferedReader(new FileReader("file.txt")); 
     String lineString; 
     try{ 
      while((lineString = br.readLine()) != null) { 
       if (StringUtils.startsWithIgnoreCase(­lineString, "abc")){ 
       //skip 
       } else { 
       //do something 
       } 
       } 
      } 
相关问题