Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.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
Android 使用EditText.setSelection()时出现意外行为_Android - Fatal编程技术网

Android 使用EditText.setSelection()时出现意外行为

Android 使用EditText.setSelection()时出现意外行为,android,Android,我正在做一个程序,用户可以使用正则表达式搜索文本,我想让匹配的文本被选中。所以我使用这个代码: public void onClick(View v) { try { switch (v.getId()) { case R.id.btn_search: Matcher m = Pattern.compile(reg.getText().toString()).matcher(t

我正在做一个程序,用户可以使用正则表达式搜索文本,我想让匹配的文本被选中。所以我使用这个代码:

    public void onClick(View v) {
        try {
            switch (v.getId()) {
                case R.id.btn_search:
                    Matcher m = Pattern.compile(reg.getText().toString()).matcher(txt.getText());
                    int start = txt.getSelectionStart();
                    if (start != txt.getSelectionEnd()) {
                        start++;
                    }
                    if (start < 0 || start >= txt.length()) {
                        start = 0;
                    }
                    while (true) {
                        try {
                            m.find(start);
                            txt.setSelection(m.start(), m.end());
                            txt.requestFocus();
                            break;
                        } catch (IllegalStateException ex) {
                            if (start == 0) {
                                err_notfound.show();
                                break;
                            }
                            start = 0;
                        }
                    }
                    break;
            }
        } catch (PatternSyntaxException ex) {
            err_syntax.show();
        } catch (Throwable ex) {
            showException("onClick", ex);
        }
    }

我测试了你的代码并进行了一次修改

 Matcher m = Pattern.compile("1*", Pattern.CASE_INSENSITIVE).matcher(txt.getText()); 
然后我确保我的EditText只有1,它突出显示了整个内容


您需要确认正则表达式的编写是否正确。你可以看到更多关于regualr表达式的内容(我刚才使用的同一个站点)。

我测试了你的代码并进行了一次修改

 Matcher m = Pattern.compile("1*", Pattern.CASE_INSENSITIVE).matcher(txt.getText()); 
然后我确保我的EditText只有1,它突出显示了整个内容


您需要确认正则表达式的编写是否正确。您可以看到更多关于regualr表达式的信息(与我刚才使用的站点相同)。

从外观上看,您提供的代码片段应该可以正常工作。您使用的是EditText吗?从外观上看,您提供的代码片段应该可以正常工作。你在用编辑文本吗?对不起。我的意思不是说它不总是起作用。当我将光标设置到文本中的任何位置,然后按下搜索按钮时,它不会特别起作用。当我在编辑正则表达式后立即按下按钮时,它工作正常。是否要检查整个编辑文本,而不管光标的位置如何,还是仅从光标的位置到末尾?抱歉。我的意思不是说它不总是起作用。当我将光标设置到文本中的任何位置,然后按下搜索按钮时,它不会特别起作用。当我在编辑正则表达式后立即按下按钮时,它工作正常。是否要检查整个编辑文本,而不管光标的位置如何,还是仅从光标所在的位置到末尾?