AndroidのInputFillter之按字符过滤长度,一个中文当两个字符
2024-10-16 20:01:53
/**
* 以Byte数的方式来实现的LengthFilter
* @author bvin
*/
public class OneByteInputFilter implements InputFilter{ private final int mMax; public OneByteInputFilter(int mMax) {
super();
this.mMax = mMax;
} @Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart,
int dend) {
//int remainLength = dest.length()-(dend-dstart); CharSequence placeStart = dest.subSequence(0, dstart);
CharSequence placeEnd = dest.subSequence(dend, dest.length()); int placeStartLength = Util.computeLenthByByte(placeStart.toString());
int placeEndLength = Util.computeLenthByByte(placeEnd.toString()); int canReplaceSize = mMax-placeStartLength-placeEndLength; if (canReplaceSize>0) {
CharSequence sourceSpan = source.subSequence(start, end);
int sourceSpanLength = Util.computeLenthByByte(sourceSpan.toString());
if (sourceSpanLength>=canReplaceSize) {//替换内容长度大于可容纳长度
String result = fixSplit(sourceSpan.toString(), canReplaceSize, false);
if (!TextUtils.isEmpty(result)) {
return result;
}else {
return "";
} }else {
return null;
} }else {
return "";
} } private static String fixSplit(String s,int sum,boolean debug){
int counter = 0;
String fixString = null;
for (int i = 0; i < s.length(); i++) {
if (counter>=sum) {
break;
}
int length = (s.charAt(i)+"").getBytes().length;
if(length>1){
counter += 2;
if (counter<=sum) {
fixString = s.substring(0, i+1);
}
} else if (length==1){
if (counter<=sum) {
fixString = s.substring(0, i+1);
}
++counter;
}else {//小于1
continue;
} /*if (counter>=sum) {
System.out.println("break;"+counter);
break;
}else {
fixString = s.substring(0, i+1);
}*/
}
return fixString;
}
}
最新文章
- 解决Jenkins 2.0 初始化界面卡住的问题
- 漂浮QQ
- PHP学习笔记:利用gd库给图片打图片水印
- Linux按键驱动程序设计详解---从简单到不简单【转】
- Android 调试机制
- Java中3DES加密解密与其他语言(如C/C++)通信
- underscorejs-find学习
- python3 时间和日期
- hdu 4739【位运算】.cpp
- VBA 中窗体模式切换,一次设计2种表现
- 【Django】 初步学习
- Python之socketserver模块和验证客户端链接的合法性
- bzoj5252 [2018多省省队联测]林克卡特树
- NLP第八条
- 利用CSS3实现鼠标悬停在图片上图片缓慢缩放的两种方法
- docker常用操作备忘
- js的简单介绍
- CentOS查找目录或文件
- 《DSP using MATLAB》Problem 3.4
- 关于ListView中getView被重复调用的问题
热门文章
- android:AlertDialog控件
- nginx多站路由配置tomcat
- facebook&#39;s HipHop for PHP: Move Fast
- 了解 JavaScript (2)- 需要了解的一些概念
- SSE图像算法优化系列三:超高速导向滤波实现过程纪要(欢迎挑战)
- [C++] const与重载
- sqlite3命令行查看中文乱码问题解决
- hustoj升级
- 解锁scott账户方法
- Failed to configure a DataSource: &#39;url&#39; attribute is not specified and no embedded datasource could be configured.