我试图仅删除文本数据中的标点符号,但保留重音字母。我不想用英语等同替换重音字母。我无法弄清楚如何调整我现有的代码以允许更高的ascii字符。
while (input.hasNext()){
String phrase = input.nextLine();
String[] words = phrase.split(" ");
for(String word: words){
String strippedInput = word.replaceAll("[^0-9a-zA-Z\\s]", "");
}
}
如果原始输入是: O sal,ouosódio,tambéméconstindicadoem pacientes hipotensos?
预期产量应为: O sal ouosódicotambéméconstindicadoem pacientes hipotensos
有什么想法吗?谢谢!
答案 0 :(得分:3)
考虑使用Unicode Categories," A-Z"是非常以英语为中心,甚至没有应对所发现的口音。
例如,以下内容将替换所有内容,包括标点符号,除了"任何字母,任何语言" (\p{L}
)或"whitespace"(\s
)。如果需要保留数字,请将其作为附加排除项重新添加。
replaceAll("[^\\p{L}\\s]", "")
答案 1 :(得分:2)
Try this.
public class punctuationRemove {
//private static String punc = "[][(){},.;!?<>%]";
static StringBuilder sb = new StringBuilder();
static char[] punc = "',.;!?(){}[]<>%".toCharArray();
public static void main(String[] args){
String s = "Hello!, how are you?";
System.out.println(removePuntuation(s));
}
public static String removePuntuation(String s)
{
String tmp;
boolean fl=true;
for(int i=0;i<s.length();i++)
{
fl=true;
char strChar=s.charAt(i);
for (char badChar : punc)
{
if (badChar == strChar)
{
fl=false;
break;
}
}
if(fl)
{
sb.append(strChar);
}
}
return sb.toString();
}
}
答案 2 :(得分:2)
使用 \ p {L} (任何语言的任何类型的字母)替换正则表达式字符串中的 a-zA-Z
while (input.hasNext()){
String phrase = input.nextLine();
String[] words = phrase.split(" ");
for(String word: words){
String strippedInput = word.replaceAll("[^0-9\\p{L}\\s]", "");
}
}
答案 3 :(得分:1)
也许我错过了这一点,但有点像......
String text = "O sal, ou o sódio, também é contraindicado em pacientes hipotensos?";
System.out.println(text);
System.out.println(text.replaceAll("[\\?,.:!\\(\\){}\\[\\]<>%]", ""));
输出
O sal, ou o sódio, também é contraindicado em pacientes hipotensos?
O sal ou o sódio também é contraindicado em pacientes hipotensos
或者,根据你的例子......
while (input.hasNext()){
String phrase = input.nextLine();
String[] words = phrase.split(" ");
for(String word: words){
String strippedInput = word.replaceAll("[\\?,.:!\\(\\){}\\[\\]<>%]", "");
}
}
答案 4 :(得分:0)
这可能效率低下,而且我确信可以改进这个想法,但你可以创建一个循环遍历字符串的方法,构建一个不是标点符号的每个字符的缓冲区。
private String replacePunctuation(String s){
String output = "";
for(int i = 0; i < s.Length(); i++){
if(s.charAt(i) != '.' && s.charAt(i) != ',' && s.charAt(i) != '!') // Add other punctuation values you're concerned about. Perhaps the Regex class would be useful here, but I am not as familiar with it as I would like.
output += s.charAt(i);
}
}
}
同样,可能不是最干净或最有效的,但它是目前我能想到的最好的。