Java удаляет знаки препинания на строке (также ’ "" и все это), сохраняя символы акцентов


Мне нужно убрать пунктуационное чтение на файле, сохранив акценты характера Я попробовал этот код, но он не работает так, как я хотел бы.

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

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

Я не могу удалить ’“” символы и другие из этих

Примечание: Eclipse и filetext.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 ("\p{Punct}", "");

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

1 ответ:

Регулярное выражение \p{Punct} по умолчанию совпадает только с пунктуацией US-ASCII, если вы не включаете классы символов Unicode. Это означает, что ваш код, как написано, будет удалять только эти символы:

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

Если вы хотите сопоставить все, что консорциум Unicode классифицирует как пунктуацию, попробуйте вместо этого \p{IsPunctuation}, который всегда проверяет свойства символов Unicode и соответствует всем пунктуациям в вашем примере (и многое другое!).

Чтобы заменить пробелы, а также знаки препинания, как в вашем примере, вы бы использовали:

             
        line = line.replaceAll("\\p{IsPunctuation}|\\p{IsWhite_Space}", "");