最近在做一个小应用,在做的途中遇到一个无比纠结的问题,不过最终还是被我解决,首先赞一个
先说一下这个问题:先从文件中读一串字符(记住是中文!!!),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'))
行了,没问题了