Подтвердить что ты не робот

Как пропустить определенную строку из текстового файла в 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(......);
                    [...]
4b9b3361

Ответ 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
                }
              }
           }