You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中替换CommaTokenizer的逗号为竖线失效问题求助

解决MultiAutoCompleteTextView替换分隔符为竖线|的问题

嘿,我帮你捋捋这个问题~你想把MultiAutoCompleteTextView选中项后的分隔符从默认的逗号改成竖线|,但自己修改基类没生效,大概率是因为没有完整重写Tokenizer接口的所有方法,或者部分逻辑没处理到位。

问题根源

系统自带的CommaTokenizer是完全基于逗号实现三个核心方法:findTokenStart、findTokenEnd、terminateToken。如果你只修改了其中一个方法的符号,另外两个方法还是沿用逗号的判断逻辑,自然不会生效。而且直接继承系统类容易遗漏细节,不如直接自定义一个完整的Tokenizer实现。

完整的竖线分隔符Tokenizer实现

直接写一个自己的Tokenizer,把所有涉及逗号的地方替换成竖线|,同时处理好空格等细节:

public static class VerticalLineTokenizer implements Tokenizer {
    @Override
    public int findTokenStart(CharSequence text, int cursor) {
        int i = cursor;
        // 向前遍历,找到最近的竖线位置
        while (i > 0 && text.charAt(i - 1) != '|') {
            i--;
        }
        // 跳过开头的空格(避免选中空内容)
        while (i < cursor && text.charAt(i) == ' ') {
            i++;
        }
        return i;
    }

    @Override
    public int findTokenEnd(CharSequence text, int cursor) {
        int i = cursor;
        int len = text.length();
        // 向后遍历,找到下一个竖线的位置
        while (i < len && text.charAt(i) != '|') {
            i++;
        }
        return i;
    }

    @Override
    public CharSequence terminateToken(CharSequence text) {
        int i = text.length();
        // 跳过文本末尾的空格
        while (i > 0 && text.charAt(i - 1) == ' ') {
            i--;
        }
        // 检查是否已经以竖线结尾,避免重复添加
        if (i > 0 && text.charAt(i - 1) == '|') {
            return text;
        } else {
            // 这里可以调整格式:比如想让选中后显示「选项|」就写text + "|",想加空格就写text + "| "
            return text + "| ";
        }
    }
}

怎么使用

把原来设置CommaTokenizer的代码,换成我们自定义的类就行:

// 假设你的MultiAutoCompleteTextView实例叫mAutoComplete
mAutoComplete.setTokenizer(new VerticalLineTokenizer());

额外提醒

  • terminateToken方法是核心,它决定了选中项后会添加什么分隔符,一定要确保这里返回的内容包含竖线;
  • 空格处理逻辑可以根据你的UI需求调整,比如不需要空格就去掉相关的while循环;
  • 不要直接修改系统CommaTokenizer的部分方法,完整重写接口更可靠。

内容的提问来源于stack exchange,提问作者user8601021

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:30:40