我知道如何替换字符串中的所有非字母数字字符,但如何仅在字符串开头和结尾处进行替换呢?
我需要将这个字符串:
"theString,"
变为:
theString
替换字符串中的所有非字母数字字符:
我需要将这个字符串:
"theString,"
变为:
theString
替换字符串中的所有非字母数字字符:
s = s.replaceAll("[^a-zA-Z0-9\\s]", "");
s = s.replaceAll("[^a-zA-Z0-9\\s]", "");
使用 ^
(匹配字符串开头)和 $
(匹配结束位置)锚点:
s = s.replaceAll("^[^a-zA-Z0-9\\s]+|[^a-zA-Z0-9\\s]+$", "");
+
)。如果您只想删除一个,请删除+
。 - falsetru使用:
s.replaceAll("^[^\\p{L}^\\p{N}\\s%]+|[^\\p{L}^\\p{N}\\s%]+$", "")
不要使用:
s.replaceAll("^[^a-zA-Z0-9\\s]+|[^a-zA-Z0-9\\s]+$", "")
其中p{L}
代表来自任何语言的任何字母。
而p{N}
代表任何脚本中的任何数字字符。
对于需要使用非英语语言(例如西班牙语)的基于拉丁文的脚本,例如:éstas,apuntó;在后者中将变为:stas和apunt。前者也适用于非拉丁文的语言。
对于所有印欧语言,添加p{Mn}
以表示阿拉伯语和希伯来语的元音。
s.replaceAll("^[^\\p{L}^\\p{N}^\\p{Mn}\\s%]+|[^\\p{L}^\\p{N}^\\p{Mn}\\s%]+$", "")
p{Me}
。对于所有语言,请使用:
s.replaceAll("^[^\\p{L}^\\p{N}^\\p{M}\\s%]+|[^\\p{L}^\\p{N}^\\p{M}\\s%]+$", "")
yourString=yourString.replaceAll("^\\W+|\\W+$","");
这会移除所有非字母数字字符
s = s.replaceAll("[^a-zA-Z0-9]", "");
Guava的CharMatcher提供了一个简洁的解决方案:
CharMatcher.javaLetterOrDigit().negate().trimFrom(input);