Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中跳过文本文件中的某一行?_Java_Io_Out Of Memory - Fatal编程技术网

如何在java中跳过文本文件中的某一行?

如何在java中跳过文本文件中的某一行?,java,io,out-of-memory,Java,Io,Out Of Memory,我目前正在学习Java,我遇到了这个问题,我想加载一个包含大量行的文件(我正在逐行读取文件),我想做的是跳过某些行(伪代码) 我试着用 if(line.startwith("abc")) 但那没用。我不确定我是否做错了,这就是为什么我在这里请求帮助,在加载函数的下面: public String loadfile(.........){ //here goes the variables try { File data= new File(dataFile);

我目前正在学习Java,我遇到了这个问题,我想加载一个包含大量行的文件(我正在逐行读取文件),我想做的是跳过某些行(伪代码)

我试着用

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(......);
                    [...]
试一试

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

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

您还可以使用
startsWithIgnoreCase
,这是由提供的函数。它接受两个字符串参数

public static boolean startsWithIgnoreCase(String str,
                                           String prefix)
此函数返回布尔值。 并检查字符串是否以指定的前缀开头


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

如果大小写不重要,请尝试使用
StringUtils.startsWithIgnoreCase(String str,
字符串前缀)
of

用法:

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

如果您有一个大的输入文件,您的代码将创建一个
OutOfMemoryError
。如果不编辑te代码,就无法对其进行任何处理(如果文件变大,则添加更多内存将失败)

我允许您将所选行存储在内存中。如果文件变大(2GB左右),则内存中会有4GB。(字符串的旧值和新值)

您必须使用streams来解决此问题

创建一个
文件输出流
,并将所选行写入该流

你的方法必须改变。对于较大的输入,yo无法返回字符串:

public String loadfile(...){
您可以返回
或文件

public MyDeletingLineBufferedReader loadFile(...)

您可以使用:

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
            }
        }
     }

org.apache.commons.lang.StringUtils中的static boolean startsWithIgnoreCase(字符串str,字符串前缀)
方法,如下所示。

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
                }
              }
           }

+我不确定whay是否投了反对票。如果有错误的标签,只需纠正它们…你说一个特定的词,如ABC,都在你的if语句中检查ABC。它们不相等,解决这个问题的一种方法是将语句转换为大写。如果情况对你没有关系。新用户发帖。如果你要投反对票,至少要提供反馈。我给了反馈。这篇文章与我5分钟前更正的文章完全相同。当我格式化和编辑它时,它被删除了。没问题。。。当我重新格式化、编辑并回答你的第一个问题时,我只是有点困惑,它已经被删除了,就在我试图点击“发送”的那一秒,下一秒它又出现了。我删除了Vikii发布的“一行”中的-1感觉,就像是过度杀戮。非常正确。我确实认为新手Java程序员尽快学习Apache Commons库非常重要,这样他们就不会重写common实用程序了。不确定他是否只是给了我们一个快速的伪代码,或者这实际上是他在做什么,但是
startwith
startsWith
不一样,
abc
abc
public MyDeletingLineBufferedReader loadFile(...)
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
            }
        }
     }
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
                }
              }
           }