代码之家  ›  专栏  ›  技术社区  ›  Luke C

如何仅获取某些字符的单个匹配项?

  •  0
  • Luke C  · 技术社区  · 7 年前

    我有下面的代码来选择,找到任何两个相邻的相同字母,并删除其中一个。

    例如: singleOccurrence("1//2/2018")

    我的代码:

    public static StringBuilder singleOccurrence(String s) {
        StringBuilder sb = new StringBuilder();
        if (s.length() > 0) {
            char prev = s.charAt(0);
            sb.append(prev);
            for (int i = 1; i < s.length(); ++i) {
                char cur = s.charAt(i);
                if (cur != prev) {
                    sb.append(cur);
                    prev = cur;
                }
            }
        }
        return sb;
    }
    

    这将返回:“2018年1月2日”

    但是,如果我输入: singleOccurrence("11//2/2018") 它将返回:“2018年1月2日”

    请注意,我的方法删除了所有字符的重复出现。

    我的问题是,如何使我的方法只对角色执行它应该执行的操作 "/", "-", ":"

    提前感谢:)

    2 回复  |  直到 7 年前
        1
  •  1
  •   rarejewel    7 年前

    将此添加到if语句中。检查上一个;cur字符不是附加到结果的“-”“/”或“:”。

    if (cur != prev || (cur != '-' || cur != '/' || cur != ':')) 
    {
       sb.append(cur);
       prev = cur;
     }
    
        2
  •  1
  •   Tung Tran    7 年前
    public void singleOccurrence(String string) 
    {
        char[] chars = string.toCharArray();
        List<Character> characters = new ArrayList<>();
        char temp = 0;
        for (char c : chars) {
            if (temp != c || (c != '/' && c != '_' && c != ':')) {
                characters.add(c);
            }
            temp = c;
        }
    
        StringBuilder sb = new StringBuilder();
        for (Character character : characters) {
            sb.append(character);
        }
    
        Log.e(TAG, sb.toString());
    }
    

    希望它能帮助你!