有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

正则表达式从单词中删除指定的尾随和前导标点(Java)

我已经生成了一个常量,它包含了所有被定义为标点符号的东西

PUNCTUATION = " !\"',;:.-_?)([]<>*#\n\t\r"

唯一的问题是,我不知道如何使用它删除指定单词的所有前导和尾随标点符号。我尝试过像replaceAllstartsWith这样的方法,但没有成功

有什么建议吗


共 (2) 个答案

  1. # 1 楼答案

    一种从开始到结束清除字符串中所有字符的方法(这应该比应用正则表达式模式更省时):

    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));
    
  2. # 2 楼答案

    完全未经测试,但应该有效:

    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);