我通过正则表达式标点符号生成一个常量,其中包含被定义为标点符号的所有内容,即
PUNCTUATION = " !\"',;:.-_?)([]<>*#\n\t\r"
唯一的问题是我不知道如何使用它来删除指定单词中的所有前导和尾随标点符号。我尝试了replaceAll
和startsWith
等方法,但没有运气。
有人建议吗?
答案 0 :(得分:1)
完全未经测试,但应该有效:
public static String trimChars(String source, String trimChars) {
char[] chars = source.toCharArray();
int length = chars.length;
int start = 0;
while (start < length && trimChars.indexOf(chars[start]) > -1) {
start++;
}
while (start < length && trimChars.indexOf(chars[length - 1]) > -1) {
length--;
}
if (start > 0 || length < chars.length) {
return source.substring(start, length);
} else {
return source;
}
}
你会这样称呼它:
String trimmed = trimChars(input, PUNCTUATION);
答案 1 :(得分:0)
String PUNCTUATION = " !\"',;:.-_?)([]<>*#\n\t\r";
String pattern = "([" + PUNCTUATION.replaceAll("(.)", "\\\\$1") + "]+)";
//[\ \!\"\'\,\;\:\.\-\_\?\)\(\[\]\<\>\*\#\t\n]
pattern = "\\b" + pattern + "|" + pattern + "\\b";
String text = ".\n<>#aword,... \n\t..# asecondword,?";
System.out.println( text.replaceAll(pattern, "") );
//awordasecondword
\ B'/ P>
用于单词边界。
首先,你应该将你的角色放入[](chracter类)并转义特殊字符。
“\ b”+模式
用于引导字符和
模式+“\ b”
用于追踪字符。
答案 2 :(得分:0)
一种从开头和结尾清除字符串中所有字符的方法(这应该比应用正则表达式模式更节省时间):
public class StringUtil {
private static final String PUNCTUATION = " !\"',;:.-_?)([]<>*#\n\t\r";
public static String strip(String original, String charsToRemove) {
if (original == null) {
return null;
}
int end = original.length();
int start = 0;
char[] val = original.toCharArray();
while (start < end && charsToRemove.indexOf(val[start]) >= 0) {
start++;
}
while (start < end && charsToRemove.indexOf(val[end - 1]) >= 0) {
end--;
}
return ((start > 0) || (end < original.length())) ? original.substring(start, end) : original;
}
}
像这样使用:
assertEquals("abc", StringUtil.strip(" !abc;-< ", StringUtils.PUNCTUATION));