我正在学习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 :(得分: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)
此函数返回布尔值。 并检查String是否以指定的前缀开头。
如果String以前缀开头,不区分大小写,则返回true。
答案 1 :(得分:2)
如果案例不重要,请尝试使用Apache Commons
的StringUtils.startsWithIgnoreCase(String str,
String prefix)
This function return boolean.
用法:
if (StringUtils.startsWithIgnoreCase(line, "abc")){
//skip line
} else {
//do something
}
答案 2 :(得分:1)
如果输入文件较大,则代码将创建OutOfMemoryError
。如果没有编辑代码,你就无法对付它(如果文件变大,添加更多内存将失败)。
我认为您将选定的行存储在内存中。如果文件变得更大(2GB左右),你将拥有4GB的内存。 (String
和新值的旧值。
你必须使用流来解决这个问题。
创建一个FileOutpuStream
,并将选定的行写入该流。
您的方法必须更改。对于大输入你不能返回一个字符串:
public String loadfile(...){
您可以返回Stream
或文件。
public MyDeletingLineBufferedReader loadFile(...)
答案 3 :(得分: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
}
}
}
或
org.apache.commons.lang.StringUtils 中的 static boolean startsWithIgnoreCase(String str, String prefix)
方法如下。
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
}
}
}