Java使用正则表达式删除不可打印的非ascii字符

位置:首页>文章>详情   分类: Java教程 > 编程技术   阅读(283)   2023-06-26 07:54:18

我们可能会通过各种方式将不需要的非 ascii 字符放入文件内容或字符串中,例如从 MS Word 文档或 Web 浏览器复制和粘贴文本、PDF 到文本的转换或 HTML 到文本的转换。我们可能希望在将文件用于应用程序之前删除不可打印的字符,因为当我们开始对此文件的内容进行数据处理时,它们被证明是有问题的。

在这个 Java 正则表达式示例中,我使用 正则表达式搜索和替换非 ascii 字符,甚至还删除不可打印的字符。

1. Java去除非打印字符

用于从不需要的字符和不可打印的字符中清除字符串内容的 Java 程序。

private static String cleanTextContent(String text) 
{
	// strips off all non-ASCII characters
	text = text.replaceAll("[^\\x00-\\x7F]", "");

	// erases all the ASCII control characters
	text = text.replaceAll("[\\p{Cntrl}&&[^\r\n\t]]", "");
	
	// removes non-printable characters from Unicode
	text = text.replaceAll("\\p{C}", "");

	return text.trim();
}

2.删除不可打印字符示例

2.1.具有非 ascii 内容的文件内容

我将读取包含以下内容的文件并删除所有非 ascii 字符,包括不可打印的字符。

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

2.2.清除 ASCII 文本的 Java 程序

package com.cundage.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 characters
		text = text.replaceAll("[^\\x00-\\x7F]", "");

		// erases all the ASCII control characters
		text = text.replaceAll("[\\p{Cntrl}&&[^\r\n\t]]", "");
		
		// removes non-printable characters from Unicode
		text = text.replaceAll("\\p{C}", "");

		return text.trim();
	}
}

程序输出。

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

how to do in java . com A funo, ugent

您可以根据需要随意修改 cleanTextContent() 方法,并根据需要添加/删除正则表达式。

快乐学习!!

地址:https://www.cundage.com/article/java-clean-ascii-text-non-printable-chars.html

相关阅读

Learn to 删除单词之间多余的空格 from a 细绳 in Java. Given 3 examples 用一个空格替换多个空格 using a regular expression, ...
我最近收到了 Packt 出版的 Anubhava Srivastava 赠送的 “Java 9 Regular Expressions” 一书。对于任何想学习什么是正则表达式并从头开始的人来说...
Java 中的 while 循环 不断执行语句块,直到特定条件的计算结果为 true。一旦条件变为 false,while 循环就会终止。 作为最佳实践,如果一开始不知道迭代次数,建议使用 wh...
在此 java 正则表达式教程中,我们将学习使用正则表达式验证信用卡号.我们将从 VISA、Mastercard、Amex 和 Diners 等多家供应商那里了解信用卡号码的号码格式和验证。 1...
在此使用正则表达式的 Java 日期验证中,我们将学习验证简单的日期格式,例如 mm/dd/yy、mm/dd/yyyy , dd/mm/yy 和 dd/mm/yyyy。在这里,我们想使用一个正则...
正则表达式 定义字符串的搜索模式。对于给定的字符串,此模式可能匹配一次或多次或根本不匹配。正则表达式的缩写是regex。正则表达式可用于搜索、编辑和操作文本。 1. 元字符的Java正则表达式列...
在此 Java 正则表达式教程 中,我们将学习使用正则表达式来验证加拿大邮政编码。您也可以修改正则表达式以使其适合任何其他格式。 1. 什么是有效的加拿大邮政编码? 加拿大邮政编码是一个六字符的...
在此 java 正则表达式教程 中,我们将学习使用正则表达式来验证特定于英国。您也可以修改正则表达式以使其适合任何其他格式。 1. 什么是有效的英国邮政编码 英国的邮政编码(或邮政编码)由五到七...
通过示例了解 Java 14 中添加的 yield 关键字 以支持 switch 表达式。 1.yield关键字 yield是在Java 14中加入的,在switch表达式中使用。 Boolea...
我们可能会通过各种方式将不需要的非 ascii 字符放入文件内容或字符串中,例如从 MS Word 文档或 Web 浏览器复制和粘贴文本、PDF 到文本的转换或 HTML 到文本的转换。我们可能...