句読点として定義されているすべてのものを含む正規表現のすべての句読点によって定数を生成しました。
PUNCTUATION = " !\"',;:.-_?)([]<>*#\n\t\r"
唯一の問題は、これを使用して、指定された単語から先頭と末尾の句読点をすべて削除する方法がわからないことです。replaceAll
やのような方法を試しstartsWith
ましたが、うまくいきませんでした。
何か提案はありますか?
完全にテストされていませんが、動作するはずです:
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);
最初と最後から文字列内のすべての文字をクリアするメソッド (これは正規表現パターンを適用するよりも時間効率が良いはずです):
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));