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< ...
随机推荐
- AngularJS中使用Karma单元测试初体验
■ 搭建karma测试环境 → 创建app和test文件夹→npm install karma --save-dev→npm install karma-jasmine --save-dev→npm ...
- asp.net 用JWT来实现token以此取代Session
先说一下为什么要写这一篇博客吧,其实个人有关asp.net 会话管理的了解也就一般,这里写出来主要是请大家帮我分析分析这个思路是否正确.我以前有些有关Session的也整理如下: 你的项目真的需要Se ...
- Java Web开发总结(一)
1.如何解决 tomcat 中文乱码问题? 2.如果某个Servlet的映射路径仅仅为一个正斜杠(/),那么这个Servlet就成为当前Web应用程序的缺省Servlet. <!-- 将Serv ...
- eclipse maven 导出项目依赖的jar包
转自:https://blog.csdn.net/andyliulin/article/details/46544555 一.导出到默认目录 targed/dependency 从Maven项目中导出 ...
- windows IOCP入门的一些资料
最近需要看一个中间件的IOCP处理模块,需要了解这方面的知识 https://www.codeproject.com/articles/13382/a-simple-application-using ...
- [转] Dangers of using dlsym() with RTLD_NEXT
There are times when you want to wrap a library function in order to provide some additional functio ...
- 查看最新的Google地址
nslookup www.google.com 8.8.8.8
- jquery ui autocomplete输入中文不自动完成的问题
因为输入法或浏览器的问题,在输入中文后并没有触发自动完成,要再按多一下键盘才触发,查看发现它是用keydown来实现.bind("keydown.autocomplete", fu ...
- 基于mindwave脑电波进行疲劳检测算法的设计(4)
上一次的实验做到可以从pc端读取到MindWave传输过来的脑电波原始数据了. 我是先定义一个结构体,该结构体对应保存所有能从硬件中取到的原始数据. struct FD_DATA { int batt ...
- 申请IPV6地址配置IPV6域名
0. 前言 最近弄了一下IPV6,虽然不知道什么时候会用到,但是服务器支持IPV6,还是有必要的. 1. 申请IPV6地址 https://tunnelbroker.net/ 到这个网址去注册一个帐号 ...