@espantos

Удалить все пробелы, табуляцию, символы и т.д. из String Java?

Я считываю текст в строку. хочу удалить абсолютно все кроме букв. Пробелы, переходы на новую строку, Абзацы, символы, ну и т.д для последующего подсчета биграмм. Пытаюсь сделать это регулярным выражением. У меня ничего не выходит
FileInputStream inFile = new
				FileInputStream("c:\\bukovski.txt");
		byte[] str = new byte [inFile.available()];
		inFile.read(str);
		String text = new String(str);
		//String textWithoutspaces = new String();
		//text = FilterText.filterWithSpaces(text);
		String textWithoutSpaces = text.toLowerCase().replaceAll("//s+", "");
		System.out.println(textWithoutSpaces);

Для начала, такое выраение не убирает переходы на новую строку в некоторых случаях

replaceAll("[^а-я]+", "");
Возвращает ничего
  • Вопрос задан
  • 8199 просмотров
Решения вопроса 1
EugeneP2
@EugeneP2
Java Dev
import java.io.*;

public class CharCleaner {

	public static void main(String[] args) throws IOException {


		try (
				Reader reader = new BufferedReader(new FileReader(new File("sourceFile.txt")));
				Writer writer = new BufferedWriter(new FileWriter(new File("resultFile.txt")))
		) {

			int ch;

			while ((ch = reader.read()) != -1) {
				if (Character.isAlphabetic(ch)) {
					writer.write(ch);
				}
			}


			writer.flush();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}

}


Не грузит весь фал в память, при чтении и записи файла есть буферизация, в процессе работы не создает кучу String объектов методами replace*
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Therapyx
@Therapyx
Data Science
Вот недавно писал для замены строк в текст фаиле с 001, 002, 003, 004.... 500 хД чуток переделал, там где стринги таб, и ньюлайн, просто добавь еще твои варианты и вставь в лупе доп строку для этого стринга. Т.е. просто сделай все нужные варианты, которые нужны именно тебе. В данном же примере я сделал только пробелы и переходы на новую строку

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.LineNumberReader;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class Replace {

	public static void main(String[] args) throws IOException{	
		
		LineNumberReader  lnr = new LineNumberReader(new FileReader(new File("C:/test.txt")));
		lnr.skip(Long.MAX_VALUE);
		System.out.println(lnr.getLineNumber() + 1 + " summary rows"); 
		lnr.close();
			
		Path path = Paths.get("C:/test.txt");
		Charset charset = StandardCharsets.UTF_8;
		
		String content = new String(Files.readAllBytes(path), charset);
		
		String tab = " ";
		String newLine = "\n";
		for (int i = 0; i < lnr.getLineNumber() + 2; i++) {					
			content = content.replaceAll(tab, "");
			content = content.replaceAll(newLine, "");
			Files.write(path, content.getBytes(charset));
		}	
	}
}
Ответ написан
Комментировать
@MamOn
У вас слеши в регекспе не в ту сторону, должно быть так: replaceAll("\\s+", "")
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы