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 ответ:
Регулярное выражение
\p{Punct}
по умолчанию совпадает только с пунктуацией US-ASCII, если вы не включаете классы символов Unicode. Это означает, что ваш код, как написано, будет удалять только эти символы:!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
Если вы хотите сопоставить все, что консорциум Unicode классифицирует как пунктуацию, попробуйте вместо этого
\p{IsPunctuation}
, который всегда проверяет свойства символов Unicode и соответствует всем пунктуациям в вашем примере (и многое другое!).Чтобы заменить пробелы, а также знаки препинания, как в вашем примере, вы бы использовали:
line = line.replaceAll("\\p{IsPunctuation}|\\p{IsWhite_Space}", "");