您好,我想逐个字符匹配,但这会产生错误,这是我的代码:
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);
这是我的完整代码:
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;
}
}
这是我的问题的图像:
答案 0 :(得分:1)
问题是您将char
类型传递给<Pattern>.matcher()
方法,该方法只接受String
或CharSequence
类型。 Here are the docs that explain it.
char ch = input.charAt(i);
String regex ="^[_\\s]||[آ-ی]$";
Matcher matcher = Pattern.compile( regex ).matcher(ch);
修复错误所需要做的就是在将char ch
变量传递给matcher()
方法时将其转换为字符串。
char ch = input.charAt(i);
String regex ="^[_\\s]||[آ-ی]$";
Matcher matcher = Pattern.compile(regex).matcher(Character.toString(ch));
答案 1 :(得分:1)
编译器告诉您必须将String
传递给方法matcher()
。您无法将char
传递给它。
如果符合您的要求,您可以创建长度为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;
}
}
此模式将逐个字符地匹配整个输入字符串。