zoukankan      html  css  js  c++  java
  • 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;
        }
    }
  • 相关阅读:
    java_JDBC(3)
    java_JDBC(2)
    java_JDBC(1)
    seq语句随笔
    bzoj3159: 决战
    bzoj3905: Square
    bzoj3864: Hero meet devil
    有上下界的网络流问题
    uva12538
    bzoj3280: 小R的烦恼
  • 原文地址:https://www.cnblogs.com/bvin/p/4568200.html
Copyright © 2011-2022 走看看