13

我目前正在学习 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(......);
                    [...]
4

4 回答 4

9

尝试

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

这将line使用函数将 转换为所有大写字符,toUpperCase() 并检查字符串是否以 . 开头ABC

如果是,true那么它将什么也不做(跳过行)并进入该else部分。

您还可以使用Apache CommonsstartsWithIgnoreCase提供的功能。它接受两个字符串参数。

public static boolean startsWithIgnoreCase(String str,
                                           String prefix)

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

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

于 2012-04-04T09:07:49.560 回答
2

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

This function return boolean.

在此处查看 javadoc

用法:

if (StringUtils.startsWithIgnoreCase(­line, "abc")){
    //skip line
} else {
    //do something
}
于 2012-04-04T09:17:36.863 回答
1

如果您有一个大的输入文件,您的代码将创建一个OutOfMemoryError. 如果不编辑代码,您将无能为力(如果文件变大,添加更多内存将失败)。

我相信您将选定的行存储在内存中。如果文件变得更大(2GB 左右),您将拥有 4GB 的内存。(旧值String和新值)。

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

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

你的方法必须改变。对于大输入,您不能返回字符串:

public String loadfile(...){

您可以返回一个Stream或一个文件。

public MyDeletingLineBufferedReader loadFile(...)
于 2012-04-04T09:46:04.030 回答
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
                }
              }
           }
于 2012-04-04T11:09:34.967 回答