如何在 Java/Kotlin 中检查字符串是不是包含非 KSC5601 字母?
Posted
技术标签:
【中文标题】如何在 Java/Kotlin 中检查字符串是不是包含非 KSC5601 字母?【英文标题】:How can I check if a String contains non-KSC5601 letter or not in Java/Kotlin?如何在 Java/Kotlin 中检查字符串是否包含非 KSC5601 字母? 【发布时间】:2021-06-01 17:27:10 【问题描述】:我正在检查韩文字母,并尝试使用[^ㄱ-ㅎ|ㅏ-ㅣ|가-힣*$]
。
对于数字、英语、韩语。我正在使用^[0-9a-zA-Zㄱ-ㅎ|ㅏ-ㅣ|가-힣]*$
。
我正在使用 DX 音乐字体。而且它不支持所有的字母,因为它是 KSC5601 类型。 我想检查一下这个字体是否可以在字符串中显示特定的字母。
例如,如果我输入숮
、쀍
,它什么也不显示。我想显示字符串包含非 KSC5601 类型的 Toast 消息,该类型无法在 EditText 或 TextView 中显示以再次写入。
et_answer.addTextChangedListener(object : TextWatcher
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int)
override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, 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
如果能显示错误字母的索引就好了。
【问题讨论】:
【参考方案1】: 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_
android:layout_
android:inputType="text"
android:digits="abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ" />
同样的事情也可以在布局中完成
如果你以这种方式实现 InputFilter
InputFilter typeFilter = new InputFilter()
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend)
Pattern p = Pattern.compile("[a-zA-Z|\u4e00-\u9fa5]+");
Matcher m = p.matcher(source.toString());
if (!m.matches()) return "";
return null;
;
其中 \u4e00-\u9fa5 这是中文字母的 unicode 范围,如果您找到韩语的 unicode 范围,可以这样做
【讨论】:
好吧,这不检查 KSC5601 类型。 将该字符集添加到允许列表中 什么字符?允许列表在哪里? 字符集arrayy或android数字属性 好吧..你不懂韩语。它有两千多套。以上是关于如何在 Java/Kotlin 中检查字符串是不是包含非 KSC5601 字母?的主要内容,如果未能解决你的问题,请参考以下文章