java - 有人可以帮我处理 Android InputFilter "filter"方法的参数吗? (加上正则表达式)

标签 java android regex ip mask

请有人可以向我解释android.text.InputFilter#filter 中source 和dest 参数的用途。 ?

我试图阅读文档,但我真的很困惑。我正在尝试使用正则表达式制作 IP 掩码。感谢您的帮助。

我现在明白了。因此,例如,如果我有 123.42,那么用户输入 123.42d,我将有:

dest = 123.42  
source = 123.42d  
start = 5  
end = 6

InputFilter[] filters = new InputFilter[1];
    filters[0] = new InputFilter() 
    {
        public CharSequence filter(CharSequence source, int start, int end, Spanned  dest, int dstart, int dend) 
        {               
            String destTxt = dest.toString();
            String resultingTxt = destTxt.substring(0, dstart) +                           source.subSequence(start, end) + destTxt.substring(dend);                

            if(resultingTxt.equals("")) return "";

            int lastChar = resultingTxt.length() -1;

            if(String.valueOf(resultingTxt.charAt(lastChar)).matches("[^0-9.]"))
            {
                return "";
            }

            return null;
        }
    };

虽然这不起作用。这不应该只返回数字吗?碰巧它也会根据用户类型返回字符。

最佳答案

如果您有一个 EditText 并为其分配了一个 InputFilter,那么每次您更改其中的文本时,filter() 方法将被调用。很像按钮的 onClick() 方法。

假设您在编辑之前在 EditText 中有文本“Hello Androi”。如果你按 按下虚拟键盘上的 D 键,然后触发 inputfilter 并基本上询问是否可以添加 d

在这种情况下,source 是“Android”,开始是 6,结束是 7 - 这是您对新文本的引用。

dest 将是“Androi”,指的是您的 EditText

中的旧文本

因此您获得了新字符串和该字符串中的一个位置(6,7),您必须检查它是否正常。如果你只想得到一个字符(比如 d),你无法决定是否您刚刚输入的数字构成了一个 IP 地址。在某些情况下,您需要将整个文本作为上下文。

如果新文本没有问题则返回 null,如果你想跳过更改返回空字符串 (""),否则返回替换字符改变。

所以一个简单的例子可能是:

/**
 * Simplified filter that should make everything uppercase
 * it's a demo and will probably not work
 *  - based on InputFilter.AllCaps
 */
public static class AllCaps implements InputFilter {
    public CharSequence filter(CharSequence source, int start, int end,
                               Spanned dest, int dstart, int dend) {

        // create a buffer to store the edited character(s).
        char[] v = new char[end - start];

        // extract the characters between start and end into our buffer
        TextUtils.getChars(source, start, end, v, 0);

        // make the characters uppercase
        String s = new String(v).toUpperCase();

        // and return them
        return s;
    }
}

它用它的大写版本替换每个更改。

关于java - 有人可以帮我处理 Android InputFilter "filter"方法的参数吗? (加上正则表达式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9815433/

相关文章:

java - 如何在jspx页面中发表评论

Android评分栏设置星级维度

java - 使用 Kivy 或 CLI 获取我的位置?

php - 创建正则表达式以匹配 00 :00:00 for duration (not time) 的格式

java - 用于文件中文本搜索的操作系统实用程序与 Java API

java - OpenGL ES 纹理图集失真

java - Intellij IDEA for java 上的 UnitTest 自动运行器

android - 尝试使用 javamail 接收电子邮件时出错

java - 使用 Android 模式和匹配器类(正则表达式)

php - 如何制作正则表达式来检测rupay借记卡