2017-02-15 8 views
2

Привет Я хочу, чтобы соответствовать первое имя посимвольно, но это сделать ошибку, это мой код:регулярное выражение не работает в андроида

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; 
    } 
} 

и это образ моей проблемы:

enter image description here

+0

Я предполагаю, что его java вещь? –

+0

Из того, что я прочитал в [docs] (https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html), 'pattern.matcher()' метод принимает только типы 'String' и' CharSequence' ... не 'char' –

+0

Зачем проверять символ по символу? Вы можете использовать '^ [_ \\ s آ-ی] + $', чтобы проверить его как целую строку. 'input.matches (" [_ \\ s آ-ی] + ")' –

ответ

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

Компилятор говорит вам, что вы должны передать String методу matcher(). Вы не можете передать char.

Вы можете создать строку длины один, если это то, что вы хотите.

Вы можете использовать регулярное выражение более естественным образом и позволить ему выполнить сопоставление для вас. Например:

Этот шаблон будет соответствовать символьным символам всей строке ввода.