<< 前 ホーム 次 >>

bakaid: 20130606

テキストエディタでは、逆方向の検索ができると便利
です。大文字小文字を考えなければString#lastIndexOf
を使えば簡単に実現できます。

private boolean findUp(EditText edit, String needle) {
    if (needle.isEmpty()) {
        return false;
    }
    int index = edit.getSelectionStart() - 1;
    if (index < 0) {
        return false;
    }
    String haystack = edit.getText().toString();
    int ret = haystack.lastIndexOf(needle, index);
    if (ret < 0) {
        return false;
    }
    edit.setSelection(ret, ret + needle.length());
    return true;
}

では、大文字小文字を無視して、なおかつ逆方向に
検索するにはどうすればいいでしょうか。残念ながら、
正規表現のメソッドには逆方向の検索がありません。

これはどうしようもないのでテキストの先頭から順方向
で探すしかありません。

private boolean findUpIgnoreCase(EditText edit, String needle) {
    if (needle.isEmpty()) {
        return false;
    }
    int start = edit.getSelectionStart();
    String haystack = edit.getText().toString();
    Pattern pat = Pattern.compile(Pattern.quote(needle), Pattern.CASE_INSENSITIVE);
    Matcher mat = pat.matcher(haystack);
    int st = -1;
    int ed = 0;
    while (true) {
        if (!mat.find(ed)) {
            break;
        }
        if (mat.start() >= start) {
            break;
        }
        st = mat.start();
        ed = mat.end();
    }
    if (st < 0) {
        return false;
    }
    edit.setSelection(st, ed);
    return true;
}

https://github.com/tkojitu/WagtailET/blob/master/src/org/jitu/wagtail/et/EditControl.java

本家Permlink

<< 前 ホーム 次 >>


Copyright © 1905 tko at jitu.org

バカが征く on Rails