我的android应用程序中有一个编辑文本,我想避免用户在字节长度达到限制时输入输入。 它在英语中很好用,但不是希伯来语。
限制为256,因此当输入为希伯来语时,我只能插入128个字符。问题是我插入带有标点符号的希伯来字母。 假设我插入一个点,即1个字节,它允许我输入超过128个字符,即使字符只是希伯来字母和标点符号。
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
int length = s.toString().getBytes().length;
if (length == bytes_limit)
{
str = s.toString();
}
else if (length > bytes_limit)
{
input.setText(str);
input.setSelection(str.length());
}
}
更新:
字符串示例:“שלום,מהשלומך”
更新2:
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
int length = s.toString().getBytes().length;
if (length <= bytes_limit)
{
str = s.toString();
}
else if (length > bytes_limit)
{
input.setText(str);
input.setSelection(str.length());
}
}
答案 0 :(得分:1)
尝试指定字符集,例如
int length = s.toString().getBytes("UTF-8").length;
用您需要的字符集替换UTF-8
见
Will String.getBytes("UTF-16") return the same result on all platforms?
答案 1 :(得分:0)
标点也是字符,除了你要写的希伯来字母之外你还要写它们(如果我没有错,你可以用ALT + XXXX添加它们)。 它们像其他任何人一样,所以当你写它们时,你会添加字符 点(。)没有标点符号,因此只需要一个字节。
要解决它,你可以删除所有的标点符号。
您可以创建一个忽略所有标点符号的函数:
private String removePunctuation(String s)
{
for(int i = 0; i < s.length(); i++)
{
if(!(s.charAt(i) <= 'ת' && s.charAt(i) >= 'א'))
{
s = s.substring(0,i) + s.substring(i+1);
}
}
return s;
}
请注意它会删除所有标点符号,包括-
和:
等等...
您可以为条件添加例外,启用&#39; - &#39;或其他人。