Java的字符串过滤掉不需要的字符

问题描述:

我有串这样的:Java的字符串过滤掉不需要的字符

−+-~*/@$^#¨%={}[häagen-dazs;:] a (le & co') jsou "výborné" <značky>?!. 

而且我想用这个来结束:

häagen-dazs a le & co jsou výborné značky. 

相较于How to filter string for unwanted characters using regex?我想保留重音(变音符号)在字符串中。

我用下面的replaceAll:

str.replaceAll("[¨%=;\\:\\(\\)\\$\\[\\]\\{\\}\\<\\>\\+\\*\\−\\@\\#\\~\\?\\!\\^\\'\\\"\\|\\/]", ""); 
  • 这是正确的做法?
  • 是否有一个更简单的方法,如何只保留字母数字字符(以及重音),空格和&。 - 符号?
+1

@Tushar这正则表达式将删除变音符号的字母。 –

+1

尝试'的replaceAll( “?(U)[^ \\ p {L} \\ p {N} \\ S&.-]”, “”)' –

+0

这里是一个[演示](HTTP:// rextester。 com/TQFI40953)使用Wiktor的评论。 –

可以遍历所有的输入String人物和测试每一个,如果你想正则表达式匹配保留它,使用这个正则表达式[a-zA-Z& \\-_\\.ýčéèêàâùû]可以分别测试每个字符。

这是你需要的代码:

String input = "−+-~*/@$^#¨%={}[häagen-dazs;:] a (le & co') jsou výborné <značky>?!"; 
    StringBuffer sb = new StringBuffer(); 
    for(char c : input.toCharArray()){ 
     if((Character.toString(c).toLowerCase()).matches("[a-zA-Z& \\-_\\.ýčéèêàâùû]")){ 
      sb.append(c); 
     } 
    } 
    System.out.println(sb.toString()); 

演示:

而这里的a working Demo使用这个代码,并给出了下面的输出:

-hagen-dazs. a le & co jsou výborné značky 

注:

  • 它使用input.toCharArray()来获得一个数组char s并在其上循环。
  • 它使用(Character.toString(c).toLowerCase()).matches("[a-zA-Z& \\-_\\.ýčéèêàâùû]")来测试迭代的char是否与允许的字符Regex匹配。
  • 它使用StringBuffer来构造新的String只允许 允许的字符。
+1

这对我来说是最好的解决方案。对于任何人谁愿意支持全捷克/斯洛伐克/德语语言,使用:(Character.toString(C).toLowerCase())相匹配( “[A-Z&\\ \\ -_äáàâčďéèêěíľňóöřšťùûúůüýž]”) – Michal

试试这个

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

你的正则表达式有什么毛病sintax,我建议你建立一个脚印的正则表达式的步骤,以立即找出是否有是一个错误。

尝试使用本网站的实时测试的正则表达式,这是非常好的

https://regex101.com/

您需要使用

String res = input.replaceAll("(?U)[^\\p{L}\\p{N}\\s&.-]+", ""); 

注意,正则表达式以外的任何字符(因为[^...]是一个否定的字符类)相匹配,一次或多次(由于+量词):

  • \p{L} - 任何Unicode字母
  • \p{N} - 任何Unicode位数
  • \s - 任何Unicode空白(\s变得支持Unicode由于(?U)直列Pattern.UNICODE_CHARACTER_CLASS改性剂版本)
  • & - 字面&
  • . - 字面.
  • - - 一个连字符(因为它被放置在字符类末尾

Java demo

import java.util.*; 
import java.lang.*; 

class Rextester 
{ 
    public static void main(String args[]) 
    { 
     String input = "−+-~*/@$^#¨%={}[häagen-dazs;:] a (le & co') jsou výborné <značky>?!"; 
     input = input.replaceAll("(?U)[^\\p{L}\\p{N}\\s&.-]+", ""); 
     System.out.println(input); 
    } 
} 

输出:-häagen-dazs a le & co jsou výborné značky