Каков лучший способ подстроки большого текста?

Вы можете использовать a.isalpha (), a.isdigit (), a.isalnum (), чтобы проверить, состоит ли из букв, цифр или комбинации чисел и букв соответственно.

if a.isalpha(): # a is made up of only letters
    do this

if a.isdigit(): # a is made up of only numbers
    do this

if a.isalnum(): # a is made up numbers and letters
    do this

Python docs расскажет вам более подробно о методах, которые вы можете вызвать для строк.

0
задан Karan Rajput 17 January 2019 в 05:22
поделиться

2 ответа

Чтение файла за символом и запись его в выходной файл может решить проблему. Поскольку он не загружает весь файл сразу.

Таким образом, процесс будет - читать входной файл за символом, продолжать до нужного начального индекса подстроки, затем начинать запись в выходной файл до конца подстроки.

Если вы получаете Exception in thread "main" java.lang.OutOfMemoryError: Java heap space, вы можете попробовать увеличить размер кучи, если вам действительно нужно прочитать файл сразу, и вы уверены, что размер строки не превысит ограничение максимального размера строки.

Следующий фрагмент демонстрирует идею выше -

import java.io.*;

public class LargeFileSubstr {

    public static void main(String[] args) throws IOException {
        BufferedReader r = new BufferedReader(new FileReader("/Users/me/Downloads/big.txt"));

        try (PrintWriter wr = new PrintWriter(new FileWriter("/Users/me/Downloads/big_substr.txt"))) {
            int startIndex = 100;
            int endIndex = 200;
            int pointer = 0;
            int ch;

            while ((ch = r.read()) != -1) {

                if (pointer > endIndex) {
                    break;
                }

                if (pointer >= startIndex) {
                    wr.print((char) ch);
                }

                pointer++;

            }
        }

    }
}

Я пытался извлечь 200 МБ подстроки из файла 2 ГБ, работает довольно быстро.

0
ответ дан shakhawat 17 January 2019 в 05:22
поделиться

В общем, если предположить, что файл объемом 2 ГБ находится на диске, и вы хотите прочитать какую-то часть из него в память, вам абсолютно не нужно сначала читать все 2 ГБ в память.

Наиболее простым решением является использование файла произвольного доступа

. Суть в том, что он обеспечивает абстракцию указателя, который можно перемещать назад и вперед по большому файлу и после того, как вы Установив, вы можете читать байты с места, на которое указывает указатель.

RandomAccessFile file = new RandomAccessFile(path, "r");
file.seek(position);
byte[] bytes = new byte[size];
file.read(bytes);
file.close();
0
ответ дан Mark Bramnik 17 January 2019 в 05:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: