android中文字符的大小问题~~

来源:互联网 发布:java float 与0 编辑:程序博客网 时间:2024/06/05 04:01

最近在做一个小应用,在做的途中遇到一个无比纠结的问题,不过最终还是被我解决,首先赞一个大笑

先说一下这个问题:先从文件中读一串字符(记住是中文!!!),android读文件操作,很简单吧,很多方法,我用的是

FileInputStream fin = openFileInput("sms");InputStreamReader is = new InputStreamReader(fin);
接着用一个char[] 类型的buffer去读
char[] buffer = new char[100];String s="";
while(is.read(buffer) > 0){s += String.valueOf(buffer);}
这个都是最基本的吧,然后放进一个String类型的字符串中,

Sring s = "";s = String.copyValueOf(buffer);//注意要用copyValueOf函数,直接toString函数会有乱码
最后将EditText控件设置为字符串s........
接着纠结的事情就出现了,EditText手动编辑的时候,最后一个字符删不掉(或者得摁很多次backspace),纠结了,为什么了?

好吧,我承认我纠结了2天,不过最后还是慢慢的试出来了吐舌头

为了说明这个问题,首先得用这条语句

Toast.makeText(this, s.length()+" "+ s, Toast.LENGTH_LONG).show();
结果是“100 欢迎来到zhao_zepeng的博客"~~~

好吧,100!!说明在中文字符的后面还有很多空字符,了解,代码稍微该一改就行:

char[] buffer = new char[(int)new File("sms").length()];

问题解决,只要把char[]数组设置的刚好是中文字符串大小不就的了,当然不是!远远比这蛋疼

结果一样,依旧是得摁很多次backspace............

无语了,纠结了一段时间,再给出一个语句

char[] temp = new char[36];temp = "阿斯顿发生的发生的发生的".toCharArray();s = String.copyValueOf(temp);Toast.makeText(this, temp.length+"", Toast.LENGTH_LONG).show();
结果是什么?36???

当然不是,12鄙视,靠,12个中文字大小等于12,亮瞎我的眼睛,不过事实就是这样,在小米和HTC手机上都一样,此图为证

这也行啊,好吧~

这下应该明了了吧,后面还有24个'\0',为什么啊,不明觉厉啊,不过事实如此,希望有人给我解答一下,谢谢~

ps:将字符串s经过如下命令处理即可

s = s.substring(0, s.indexOf('\0'))
行了,没问题了

原创粉丝点击