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("[¨%=;\\:\\(\\)\\$\\[\\]\\{\\}\\<\\>\\+\\*\\−\\@\\#\\~\\?\\!\\^\\'\\\"\\|\\/]", "");
- 这是正确的做法?
- 是否有一个更简单的方法,如何只保留字母数字字符(以及重音),空格和&。 - 符号?
可以遍历所有的输入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
只允许 允许的字符。
这对我来说是最好的解决方案。对于任何人谁愿意支持全捷克/斯洛伐克/德语语言,使用:(Character.toString(C).toLowerCase())相匹配( “[A-Z&\\ \\ -_äáàâčďéèêěíľňóöřšťùûúůüýž]”) – Michal
试试这个
str.replaceAll("[\\\/\.\:\%\!\[\]\(\)\{\}\?\^\*\+\"\'#@$;¨=&<>-~−]", "");
你的正则表达式有什么毛病sintax,我建议你建立一个脚印的正则表达式的步骤,以立即找出是否有是一个错误。
尝试使用本网站的实时测试的正则表达式,这是非常好的
您需要使用
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
改性剂版本) -
&
- 字面&
-
.
- 字面.
-
-
- 一个连字符(因为它被放置在字符类末尾
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
@Tushar这正则表达式将删除变音符号的字母。 –
尝试'的replaceAll( “?(U)[^ \\ p {L} \\ p {N} \\ S&.-]”, “”)' –
这里是一个[演示](HTTP:// rextester。 com/TQFI40953)使用Wiktor的评论。 –