Java 删除字符串上的标点符号(也包括“”和所有这些)维护重音字符

Posted

技术标签:

【中文标题】Java 删除字符串上的标点符号(也包括“”和所有这些)维护重音字符【英文标题】:Java remove punctuation on a String (also ’ “ ” and all of these) maintaining accents characters 【发布时间】:2018-05-02 04:23:47 【问题描述】:

我需要删除文件上的标点符号,保留重音字符 我尝试了这段代码,但没有按照我的方式工作。

Expectation: input=> ’'qwe..,rty ‘èeéò’“ ”o" "à     output=> qwertyèeéòoà

Effective result: input=> ’'qwe..,rty ‘èeéò’“ ”o" "à   output=>’qwerty ‘èeéò’“ ”o" "à

我无法删除 ’“” 符号和其他符号

注意:Eclipsefiletext.txt 设置为 UTF-8

谢谢

import java.io.*;
import java.util.Scanner;

public class DataCounterMain 
    public static void main (String[] args) throws FileNotFoundException 

    File file = new File("filetext.txt");

    try 
        Scanner filescanner = new Scanner(file);
        while (filescanner.hasNextLine()) 

            String line = filescanner.nextLine();
            line=line.replaceAll ("\\pPunct", "");

            System.out.println(line);
        
    
    catch(FileNotFoundException e) 
        System.err.println(file +" FileNotFound");
    
    

【问题讨论】:

您似乎想删除所有 Unicode 标点和符号。使用line=line.replaceAll("(?U)[\\pS\\pP]+", ""); 【参考方案1】:

默认情况下,正则表达式 \pPunct 仅匹配 US-ASCII 标点符号,除非您启用 Unicode 字符类。这意味着您编写的代码只会删除这些字符:

!"#$%&'()*+,-./:;<=>?@[\]^_`|~

如果您想匹配 Unicode 协会归类为标点的所有内容,请尝试使用 \pIsPunctuation,它始终检查 Unicode 字符属性并匹配您示例中的所有标点(以及更多!)。

要替换空格和标点符号,就像在您的示例中一样,您可以使用:

             
        line = line.replaceAll("\\pIsPunctuation|\\pIsWhite_Space", "");
             

【讨论】:

漫步!为了更清楚,您能否将修改后的 DataCounterMain 类放在您的答案中。 @VinayPrajapati 我添加了一个示例。

以上是关于Java 删除字符串上的标点符号(也包括“”和所有这些)维护重音字符的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式

正则表达式

熟练掌握正则表达

如何使用alt键+数字键盘上的数字键打出特殊符号

6.3 特殊字符串

重置/删除所有浏览器(包括移动设备)上的输入、选择和按钮的所有样式