AndroidのInputFillter之按字符过滤长度,一个中文当两个字符
/**
* 以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;
}
}
AndroidのInputFillter之按字符过滤长度,一个中文当两个字符的更多相关文章
- C#返回字符串的字节长度,一个中文算两个字符的代码
如下代码段是关于C#返回字符串的字节长度,一个中文算两个字符的代码. public static int GetLength(string str) { if (str.Length == 0) re ...
- JavaScript判断字符串的字符长度(中文占两个字符)
判断方法 //判断字符串中的字符 中文算两个字符 function chkstrlen(str) { ; ; i < str.length; i++) { ) //如果是汉字,则字符串长度加2 ...
- NET MVC全局异常处理(一) 【转载】网站遭遇DDoS攻击怎么办 使用 HttpRequester 更方便的发起 HTTP 请求 C#文件流。 Url的Base64编码以及解码 C#计算字符串长度,汉字算两个字符 2019周笔记(2.18-2.23) Mysql语句中当前时间不能直接使用C#中的Date.Now传输 Mysql中Count函数的正确使用
NET MVC全局异常处理(一) 目录 .NET MVC全局异常处理 IIS配置 静态错误页配置 .NET错误页配置 程序设置 全局异常配置 .NET MVC全局异常处理 一直知道有.NET有相关 ...
- C#计算字符串长度,汉字算两个字符
在C#中的字符串类String中,有个Length属性表示字符串的长度,但该字段返回的是字符的个数,如果字符串中含有中文字符的话,一个汉字占用两个字符的长度,此时获取的长度就不够精确,当然也看具体业务 ...
- js判断输入字符串长度(汉字算两个字符,字母数字算一个)
js判断输入字符串长度(汉字算两个字符,字母数字算一个) 文本输入时,由于数据库表字段长度限制会导致提交失败,因此想到了此方法验证. 废话不多说上代码: <html> <head&g ...
- Jquery Validate自定义验证规则,一个汉字等于两个字符长度
使用Jquery validate时写的一些东西,在这里做个笔记 在使用 Jquery validate 的minlength和maxlength进行文本框内容长度验证的时候,对于一个汉字的长度检测结 ...
- oracle 插入数据之坑--------oracle字符类型varchar2一个中文占多少字节
如果你误认为是两个字节,那就大错特错了 Oracle 一个中文汉字 占用几个字节,要根据Oracle中字符集编码决定 查看oracle server端字符集 select userenv('langu ...
- javascript 返回字符长度,中文为两个字节,英文为一个字节
//正则:用于区分中文为两个字节function getLength(str){ return String(str).replace(/[^\x00-\xff]/g,'aa').length; ...
- 请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。
// test20.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include< ...
随机推荐
- 【网络】高性能网络编程--下一个10年,是时候考虑C10M并发问题了
转载:http://www.52im.net/thread-568-1-1.html 1.前言 在本系列文章的上篇中我们回顾了过云的10年里,高性能网络编程领域著名的C10K问题及其成功的解决方案(上 ...
- DNS的域名的解析解决办法(openDNS)
http://www.williamlong.info/archives/1101.html
- docker部署maven私有仓库 nexus3
docker pull sonatype/nexus3: docker run -d --name nexus3.x --network host -v /volume-data/nexus3/nex ...
- 苹果产品时间发布表统计(iPhone、iPad),以及32位和64位机的说明
之前因为某些原因,需要对apple家族的手机和pad产品做一个上市时间排序,以及分析分别是哪种CPU机型 总结如下: iPad家族: 1.iPad - 2010.1.27发布 2.iPad 2 ...
- C# MD5 加密,解密
//生成cs文件 public class MD5Help { ///MD5加密 public static string MD5Encrypt(string pToEncrypt, string s ...
- SNF快速开发平台--多组织+多平台+多系统处理方案
多组织架构的集团要看组织的组成形式: 1.如果每个组织都是独立法人,这个相对来说简单一些,组织之间的关联交易跟集团外部客户交易没什么本质区别, 各个公司都是独立核算,正常的应收应付都需要开发票,各自出 ...
- runtime MethodSwizzle 实践之扩展 NIAttributedLabel
runtime MethodeSwizzle 提供 简单的方法交换已知类的 Method IMP. Method 可以是 外部可访问的 public 或者 private Method .所谓的属性 ...
- mongodb复制集Replica Set使用简介
MongoDB高可用 对于MongoDB,可以支持使用单机模式提供服务,但是在实际的生产环境中,单机模式将面临很大的风险,一旦这个数据库服务出现问题,就会导致线上的服务出现错误甚至崩溃.因此,在实际生 ...
- linux每日命令(1):ls命令
ls命令是linux下最常用的命令.ls命令就是list的缩写缺省下ls用来打印出当前目录的清单如果ls指定其他目录那么就会显示指定目录里的文件及文件夹清单. 通过ls 命令不仅可以查看linux ...
- linux每日命令(7):rmdir命令
rmdir是常用的命令,该命令的功能是删除空目录,一个目录被删除之前必须是空的.(注意,rm - r dir命令可代替rmdir,但是有很大危险性.)删除某目录时也必须具有对父目录的写权限. 一.命令 ...