微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 Java/Kotlin 中检查字符串是否包含非 KSC5601 字母?

如何解决如何在 Java/Kotlin 中检查字符串是否包含非 KSC5601 字母?

我正在检查韩文字母并尝试使用 [^ㄱ-ㅎ|ㅏ-ㅣ|가-힣*$]。 对于数字,英语,韩语。我正在使用 ^[0-9a-zA-Zㄱ-ㅎ|ㅏ-ㅣ|가-힣]*$

我正在使用 DX 音乐字体。它不支持所有字母,因为它是 KSC5601 类型。 我想检查一下这个字体是否可以在字符串中显示特定的字母。

例如,如果我输入 ,,它什么也不显示。我想显示字符串包含非 KSC5601 类型的吐司消息,该类型无法在 EditText 或 TextView 中再次写入。

et_answer.addTextChangedListener(object : TextWatcher {
    override fun beforeTextChanged(p0: CharSequence?,p1: Int,p2: Int,p3: Int) {
    }

    override fun onTextChanged(p0: CharSequence?,p3: Int) {
    }

    override fun afterTextChanged(p0: Editable?) {
        if (!Pattern.matches(TextUtil.KoEnNumRex,et_answer.text.toString())) {
            MyToast(this@MyActivity).makeText("Only Korean,English,Number are available.")
            return
        }
    }
}

如果能显示错误字母的索引就好了。

解决方法

 public class MainActivity extends Activity {

    private EditText editText;

    private String CharacterSet = "~#^|$%&*!FGHIJKLMOPTWXYZ";

    private InputFilter filter = new InputFilter() {

        @Override
        public CharSequence filter(CharSequence source,int start,int end,Spanned dest,int dstart,int dend) {

            if (source != null && !CharacterSet.contains(("" + source))) {
                return "";
            }
            return null;
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        editText = (EditText) findViewById(R.id.editText);
        editText.setFilters(new InputFilter[] { filter });
    }

}

这里我们定义了一个有效的字符集,并且只允许它作为输入

<EditText
    android:id="@+id/nameText"
    android:layout_width="177dp"
    android:layout_height="wrap_content"
    android:inputType="text"
    android:digits="abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ" />

同样的事情也可以在布局中完成

如果你以这种方式实现 InputFilter

InputFilter typeFilter = new InputFilter() {
        @Override
        public CharSequence filter(CharSequence source,int dend) {
            Pattern p = Pattern.compile("[a-zA-Z|\u4e00-\u9fa5]+");
            Matcher m = p.matcher(source.toString());
            if (!m.matches()) return "";
            return null;
        }
    };

where \u4e00-\u9fa5 这是中文字母的 unicode 范围,如果你找到韩文的 unicode 范围,可以做到类似的

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。