AndroidのInputFillter之按字元過濾長度,一個中文當兩個字元

來源:互聯網
上載者:User

標籤:

/** * 以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之按字元過濾長度,一個中文當兩個字元

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.