Вы можете использовать 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 расскажет вам более подробно о методах, которые вы можете вызвать для строк.
Чтение файла за символом и запись его в выходной файл может решить проблему. Поскольку он не загружает весь файл сразу.
Таким образом, процесс будет - читать входной файл за символом, продолжать до нужного начального индекса подстроки, затем начинать запись в выходной файл до конца подстроки.
Если вы получаете 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 ГБ, работает довольно быстро.
В общем, если предположить, что файл объемом 2 ГБ находится на диске, и вы хотите прочитать какую-то часть из него в память, вам абсолютно не нужно сначала читать все 2 ГБ в память.
Наиболее простым решением является использование файла произвольного доступа
. Суть в том, что он обеспечивает абстракцию указателя, который можно перемещать назад и вперед по большому файлу и после того, как вы Установив, вы можете читать байты с места, на которое указывает указатель.
RandomAccessFile file = new RandomAccessFile(path, "r");
file.seek(position);
byte[] bytes = new byte[size];
file.read(bytes);
file.close();