如何在java中跳过文本文件中的某一行?
我目前正在学习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);
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
}
}
}