我要删除特殊字符,例如:
- + ^ . : ,
使用Java从String中获取。
我要删除特殊字符,例如:
- + ^ . : ,
使用Java从String中获取。
replaceAll
其形成样式,然后将它们删除。如果您有更深奥的要求,请编辑问题。:)
replaceAll
为它们做一个,要么对它们进行解析字符串,将不是您想要取出的字符的字符添加到另一个字符串中,最后对要返回的字符串执行+ =。
deleteChars.apply( fromString, "-+^.:," );
–在此处找到deleteChars
Answers:
这取决于您定义为特殊字符的内容,但是请尝试replaceAll(...)
:
String result = yourString.replaceAll("[-+.^:,]","");
请注意,该^
字符不能是列表中的第一个字符,因为您要么必须对其进行转义,否则将意味着“除这些字符外的任何字符”。
另一个注意事项:-
字符必须是列表中的第一个或最后一个,否则您必须对其进行转义,否则它将定义一个范围(例如:-,
,表示“范围:
为to的所有字符” ,
)。
所以,为了保持一致性,而不是依赖于角色定位,你可能想逃避所有那些在正则表达式特殊含义的字符(下面的列表并不完整,所以要注意的其他人物像(
,{
,$
等等) :
String result = yourString.replaceAll("[\\-\\+\\.\\^:,]","");
如果要摆脱所有标点和符号,请尝试以下正则表达式:(\p{P}\p{S}
请注意,在Java字符串中,您必须转义反斜杠:)"\\p{P}\\p{S}"
。
如果您可以精确定义应该在字符串中保留的内容,则第三种方法可能是这样的:
String result = yourString.replaceAll("[^\\w\\s]","");
这意味着:替换所有不是单词字符(在任何情况下均为az,0-9或_)或空格的内容。
编辑:请注意,还有其他两种模式可能会有所帮助。但是,我无法全部解释它们,因此请查看regular-expressions.info的参考部分。
如Ray所建议的,这是“定义允许的字符”方法的限制性较小的替代方法:
String result = yourString.replaceAll("[^\\p{L}\\p{Z}]","");
正则表达式匹配所有不是任何语言的字母和分隔符(空格,换行符等)的所有内容。请注意,您不能使用[\P{L}\P{Z}]
(大写P表示不具有该属性),因为那意味着“不是字母或不是空格的所有内容”,几乎所有内容都匹配,因为字母不是空格,反之亦然。
有关Unicode的其他信息
某些unicode字符似乎由于不同的编码方式(例如单个代码点或代码点的组合)而引起问题。有关更多信息,请参考regular-expressions.info。
[\P{L}]
-
字符必须是列表中的第一个或最后一个,否则需要转义。
[^\\p{L}\\p{Z}]
似乎也消除了德国的Umlauts(ä,ö,ü)(至少对我来说是这样的:/),因此“正则表达式匹配所有不是任何语言的字母的东西”似乎不是100%正确的
String result = yourString.replaceAll("[^\w\s]","");
犯了错Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ )
这将替换字母数字以外的所有字符
replaceAll("[^A-Za-z0-9]","");
如此处所述 http://developer.android.com/reference/java/util/regex/Pattern.html
模式是编译的正则表达式。在许多情况下,最好使用
String.matches
,String.replaceAll
和这样的便捷方法String.split
,但是如果您需要使用相同的正则表达式进行大量工作,则一次编译并重用它可能会更有效。Pattern类及其伴侣Matcher还提供了比String公开的少量功能更多的功能。
public class RegularExpressionTest {
public static void main(String[] args) {
System.out.println("String is = "+getOnlyStrings("!&(*^*(^(+one(&(^()(*)(*&^%$#@!#$%^&*()("));
System.out.println("Number is = "+getOnlyDigits("&(*^*(^(+91-&*9hi-639-0097(&(^("));
}
public static String getOnlyDigits(String s) {
Pattern pattern = Pattern.compile("[^0-9]");
Matcher matcher = pattern.matcher(s);
String number = matcher.replaceAll("");
return number;
}
public static String getOnlyStrings(String s) {
Pattern pattern = Pattern.compile("[^a-z A-Z]");
Matcher matcher = pattern.matcher(s);
String number = matcher.replaceAll("");
return number;
}
}
结果
String is = one
Number is = 9196390097
删除特殊字符
String t2 = "!@#$%^&*()-';,./?><+abdd";
t2 = t2.replaceAll("\\W+","");
输出将是: abdd.
这很完美。
使用String.replaceAll()
Java中的方法。
replaceAll应该足以解决您的问题。
String
课程的文档?特别要注意“ regex”一词;有一些方法,一些想法应该告诉您如何进行... :)