Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.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 正则表达式在android中不起作用_Java_Regex_Validation_Android Edittext - Fatal编程技术网

Java 正则表达式在android中不起作用

Java 正则表达式在android中不起作用,java,regex,validation,android-edittext,Java,Regex,Validation,Android Edittext,嗨,我想逐个字符匹配名字字符,但这会出错,这是我的代码: int length = input.length(); for (int i = 0; i < length; i++){ char ch = input.charAt(i); String regex ="^[_\\s]||[آ-ی]$"; Matcher matcher = Pattern.compile( regex ).matcher(ch); int length=input.length();

嗨,我想逐个字符匹配名字字符,但这会出错,这是我的代码:

int length = input.length();
for (int i = 0; i < length; i++){
    char ch = input.charAt(i);
    String regex ="^[_\\s]||[آ-ی]$";
    Matcher matcher = Pattern.compile( regex ).matcher(ch);
int length=input.length();
for(int i=0;i
这是我的完整代码:

public class MainActivity extends AppCompatActivity {
    EditText editText;
    Button button;
    String input;
    String result;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        editText = (EditText)findViewById(R.id.edt);
        button = (Button)findViewById(R.id.btn);
        button.setOnClickListener(new View.OnClickListener() {
            @SuppressLint("ShowToast")
            @Override
            public void onClick(View v) {
               input = editText.getText().toString();
                check_reg();
            }
        });

    }
    public  boolean check_reg(){
        int length = input.length();
        for (int i = 0; i < length; i++){
            char ch = input.charAt(i);
            String regex ="^[_\\s]||[آ-ی]$";
            Matcher matcher = Pattern.compile( regex ).matcher(ch);
            if (matcher.find( ))
            {
                result = matcher.group();
                Toast.makeText(MainActivity.this, "match", Toast.LENGTH_SHORT).show();
            }
            else
            {
                Toast.makeText(MainActivity.this, "no match", Toast.LENGTH_SHORT).show();
            }

        }
        return false;
    }
}
public类MainActivity扩展了AppCompatActivity{
编辑文本编辑文本;
按钮;
字符串输入;
字符串结果;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText=(editText)findViewById(R.id.edt);
按钮=(按钮)findViewById(R.id.btn);
setOnClickListener(新视图.OnClickListener(){
@SuppressLint(“ShowToast”)
@凌驾
公共void onClick(视图v){
input=editText.getText().toString();
检查_reg();
}
});
}
公共布尔检查_reg(){
int length=input.length();
for(int i=0;i
这是我问题的一个图像:


问题在于,您正在将
char
类型传递给
.matcher()
方法,该方法只接受类型
String
CharSequence

修复此错误所需做的只是将
char ch
变量传递给
matcher()
方法时将其转换为字符串

char ch = input.charAt(i);
String regex ="^[_\\s]||[آ-ی]$";
Matcher matcher = Pattern.compile(regex).matcher(Character.toString(ch));

编译器告诉您必须将
字符串
传递给方法
matcher()
。不能将
字符
传递给该方法

如果需要,可以创建长度为1的字符串

您可以更自然地使用正则表达式,并让它为您进行匹配。例如:

public  boolean check_reg(){
    String regex ="^(?:[_\\s]||[آ-ی])+$";
    Matcher matcher = Pattern.compile( regex ).matcher(input);
    if (matcher.find( ))
        {
            result = matcher.group();
            Toast.makeText(MainActivity.this, "match", Toast.LENGTH_SHORT).show();
            return true;
        }
        else
        {
            Toast.makeText(MainActivity.this, "no match", Toast.LENGTH_SHORT).show();
            return false;
        }
}

这个模式将一个字符一个字符地匹配整个输入字符串。

我猜它是java的东西?从我在中读到的,
pattern.matcher()
方法只接受类型
string
CharSequence
…而不是
char
为什么要逐个字符检查?你可以使用
^[\sآ+$
检查整个字符串。
input.matches(“[\u\\sآ-ی]+”)
@nazanin ask Jawad Ysari
public  boolean check_reg(){
    String regex ="^(?:[_\\s]||[آ-ی])+$";
    Matcher matcher = Pattern.compile( regex ).matcher(input);
    if (matcher.find( ))
        {
            result = matcher.group();
            Toast.makeText(MainActivity.this, "match", Toast.LENGTH_SHORT).show();
            return true;
        }
        else
        {
            Toast.makeText(MainActivity.this, "no match", Toast.LENGTH_SHORT).show();
            return false;
        }
}