Как пропустить определенную строку из текстового файла в 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(......);
[...]
Ответы
Ответ 1
Try
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)
Эта функция возвращает boolean.
И проверяет, начинается ли строка с указанным префиксом.
Возвращает true, если строка начинается с префикса, нечувствительная к регистру.
Ответ 2
Если дело не важно, попробуйте использовать StringUtils.startsWithIgnoreCase(String str,
String prefix)
Apache Commons
This function return boolean.
См. здесь javadoc
Использование:
if (StringUtils.startsWithIgnoreCase(line, "abc")){
//skip line
} else {
//do something
}
Ответ 3
Если у вас большой файл ввода, вы создадите код OutOfMemoryError
. вы ничего не можете сделать против него без редактирования кода te (добавление большего количества памяти не удастся, если файл станет больше).
Я храню выделенные строки в памяти. Если файл получает lager (2 ГБ или около того), у вас будет 4 ГБ в памяти. (Старое значение String
и новое).
Вам нужно работать с потоками, чтобы решить эту проблему.
Создайте FileOutpuStream
и напишите выделенную строку в этот поток.
Ваш метод должен быть изменен. Для большого ввода yo не может вернуть строку:
public String loadfile(...){
Вы можете вернуть Stream
или файл.
public MyDeletingLineBufferedReader loadFile(...)
Ответ 4
вы можете использовать:
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
}
}
}