Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 限制在编辑文本中输入数字_Java_Android - Fatal编程技术网

Java 限制在编辑文本中输入数字

Java 限制在编辑文本中输入数字,java,android,Java,Android,我需要限制用户在EditText中输入数字(0-9),并允许键盘上每隔一个字符输入一个数字 以下代码不适用于以下场景 如果用户输入字母表,然后输入数字,编辑文本将变为空 InputFilter withoutNumberFilter = new InputFilter() { public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, i

我需要限制用户在EditText中输入数字(0-9),并允许键盘上每隔一个字符输入一个数字


以下代码不适用于以下场景

如果用户输入字母表,然后输入数字,编辑文本将变为空

InputFilter withoutNumberFilter = new InputFilter() {
    public CharSequence filter(CharSequence source, int start, int end,
            Spanned dest, int dstart, int dend) {
        for (int i = start; i < end; i++) {
            if (Character.isDigit(source.charAt(i))) {
                return "";
            }
        }
        return null;
    }
};

editText.setFilters(new InputFilter[] { withoutNumberFilter });
InputFilter withoutNumberFilter=newinputfilter(){
公共CharSequence筛选器(CharSequence源、int开始、int结束、,
跨越目的地、内部数据起点、内部数据起点){
for(int i=start;i
只需使用正则表达式替换所有数字:

source = source.replaceAll("[0-9]","")

如果要在用户输入时执行此操作,则只需在每个操作事件后输入此语句。

您可以使用
isleter()
方法进行比较

if (!Character.isLetter(source.charAt(i))) {
   return "";
}

您只需将您的条件更新为:

if(!Character.isleter(source.charAt(i))


扩展类可能有助于实现侦听器。然后可以在其他形式中重用扩展的JTextField

这只是一个简单的例子

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JTextField;

public class MyJTextField extends JTextField implements KeyListener {

    public MyJTextField() {
        super();
        addKeyListener(this);
    }

    boolean found = false;

    @Override
    public void keyPressed(KeyEvent arg0) {

        char c = arg0.getKeyChar();
        char[] cs = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};

        for (int i = 0; i < cs.length; i++) {
            if (c == cs[i]) {
                found = true;
                break;
            }
        }
    }

    @Override
    public void keyReleased(KeyEvent arg0) {

        if (found) {
            String text = getText();
            setText(text.substring(0, text.length() - 1));
            found = false;
        }
    }

    @Override
    public void keyTyped(KeyEvent arg0) {
        // No action.
    }
}
import java.awt.event.KeyEvent;
导入java.awt.event.KeyListener;
导入javax.swing.JTextField;
公共类MyJTextField扩展了JTextField,实现了KeyListener{
公共MyJTextField(){
超级();
addKeyListener(此);
}
布尔值=false;
@凌驾
按下公共无效键(KeyEvent arg0){
char c=arg0.getKeyChar();
char[]cs={'0','1','2','3','4','5','6','7','8','9'};
对于(int i=0;i

欢迎发表任何其他评论。

“以下代码不起作用”它怎么不起作用?你到底希望它做什么,它又在做什么呢?它应该允许除0-9范围内的数字以外的所有其他字符。它应该允许字母、特殊字符、中文字符等。您不想这样做吗!Character.isleter()