Java удаляет непечатаемые символы, не входящие в набор ASCII, с помощью регулярных выражений

В содержимом файла или строке могут оказаться нежелательные символы, не входящие в набор ASCII, в результате различных действий, например, копирования и вставки текста из документа MS Word или веб-браузера, преобразования PDF в текст или преобразования HTML в текст. Возможно, нам потребуется удалить непечатаемые символы перед использованием файла в приложении, поскольку они могут стать проблемой при начале обработки данных в содержимом этого файла.

В этом примере регулярного выражения Java я использую регулярные выражения для поиска и замены символов, не входящих в набор ASCII, а также для удаления непечатаемых символов.

1. Java удаляет непечатаемые символы

Программа Java для очистки содержимого строки от нежелательных символов и непечатаемых символов.

private static String cleanTextContent(String text){// strips off all non-ASCII characterstext = text.replaceAll("[^\\x00-\\x7F]", "");// erases all the ASCII control characterstext = text.replaceAll("[\\p{Cntrl}&&[^\r\n\t]]", "");// removes non-printable characters from Unicodetext = text.replaceAll("\\p{C}", "");return text.trim();}

2. Пример удаления непечатаемых символов

2.1. Содержимое файла с не-ASCII содержимым

Я прочитаю файл со следующим содержимым и удалю все символы, не входящие в кодировку ASCII, включая непечатаемые символы.

öäü how to do in java . com A função, Ãugent

2.2. Программа Java для очистки текста ASCII

package com.howtodoinjava.demo;import java.io.File;import java.io.IOException;import java.nio.file.Files;import java.nio.file.Paths;import java.util.stream.Stream;public class CleanTextExample{public static void main(String[] args){File file = new File("c:/temp/data.txt");String uncleanContent = readFileIntoString(file);System.out.println(uncleanContent);String cleanContent = cleanTextContent(uncleanContent);System.out.println(cleanContent);}private static String readFileIntoString(File file){StringBuilder contentBuilder = new StringBuilder();try(Stream<String> stream = Files.lines(Paths.get(file.toURI()))){stream.forEach(s -> contentBuilder.append(s).append("\n"));}catch(IOException e){System.out.println("Error reading " + file.getAbsolutePath());}return contentBuilder.toString();}private static String cleanTextContent(String text){// strips off all non-ASCII characterstext = text.replaceAll("[^\\x00-\\x7F]", "");// erases all the ASCII control characterstext = text.replaceAll("[\\p{Cntrl}&&[^\r\n\t]]", "");// removes non-printable characters from Unicodetext = text.replaceAll("\\p{C}", "");return text.trim();}}

Вывод программы.

öäü how to do in java . com A função, Ãugenthow to do in java . com A funo, ugent

Не стесняйтесь изменять метод cleanTextContent() по своему усмотрению, а также добавлять/удалять регулярные выражения по мере необходимости.

Прокрутить вверх