我想删除字符串中的所有前导和尾随标点符号。我怎么能这样做?
基本上,我想在单词之间保留标点符号,我需要删除所有前导和尾随标点符号。
.
,@
,_
,&
,/
,-
或数字\'
我试过
Pattern p = Pattern.compile("(^\\p{Punct})|(\\p{Punct}$)");
Matcher m = p.matcher(term);
boolean a = m.find();
if(a)
term=term.replaceAll("(^\\p{Punct})", "");
但它不起作用!!
答案 0 :(得分:9)
确定。所以基本上你想在你的字符串中找到一些模式,如果匹配的模式就行动。
这样做,这种无聊的方式将是乏味的。 naiive解决方案可能涉及类似
while(myString.StartsWith("." || "," || ";" || ...)
myString = myString.Substring(1);
如果你想做一个更复杂的任务,甚至不可能按照我提到的方式去做。
这就是为什么我们使用正则表达式。它是一种“语言”,您可以使用它来定义模式。如果字符串匹配该模式,计算机将能够说。要了解正则表达式,只需将其输入谷歌即可。第一个链接之一:http://www.codeproject.com/Articles/9099/The-30-Minute-Regex-Tutorial
至于你的问题,你可以试试这个:
myString.replaceFirst("^[^a-zA-Z]+", "")
正则表达式的含义:
第一个^表示在这个模式中,接下来必须是什么 字符串的开头。
[]定义字符。在这种情况下,那些不是 (第二个^)字母(a-zA-Z)。
您可以使用类似的正则表达式删除尾随字符。
myString.replaceAll("[^a-zA-Z]+$", "");
$表示“在字符串末尾”
答案 1 :(得分:5)
您可以使用正则表达式:
private static final Pattern PATTERN =
Pattern.compile("^\\p{Punct}*(.*?)\\p{Punct}*$");
public static String trimPunctuation(String s) {
Matcher m = PATTERN.matcher(s);
m.find();
return m.group(1);
}
边界匹配器^
和$
确保整个输入都匹配。
点.
与任何单个字符匹配。
星星*
的意思是“将前面的事物匹配零次或多次”。
括号()
定义了一个捕获组,其捕获值通过调用Matcher.group(1)
来获取。
?
中的(.*?)
表示您希望匹配为非贪婪,否则尾随的标点符号将包含在组中。
答案 2 :(得分:1)
在模式上使用this教程。你必须创建一个匹配字符串的正则表达式,以字母或数字开头,以字母或数字结尾,然后inputString.matches("regex")