本人因为Android才开始使用Java,上次因为字符串比较用==的问题已经让大家见笑了。感谢大家的帮助。这次又遇到不懂的地方了。还希望大家能够多多指教我这个迷路人。这里提前谢谢大家了。问题是这样的:我用C#创建了一个UTF-8文本文件sample.txt。假设里面写入了一个字符串
string s="字符串:abc";
而且已经通过工具确定这个文本文件没有BOM。然后我在Android中把这个文本文件放入raw目录中打开,用TextView显示。另外界面上还有几个Button。
相关代码:String ss="字符串:abc";protected java.io.InputStreamReader fs;
protected java.io.FileInputStream fis;
protected java.io.BufferedReader sr;
protected java.io.InputStream ips;try
{
ips=this.getResources().openRawResource(R.raw.sample);
fs=new java.io.InputStreamReader(ips,"UTF-8");
sr=new java.io.BufferedReader(fs);
String s=sr.readLine();
this.mt.setText(s);
if(s.equals(ss)==true) this.b2.setText("相同");//b2是一个Button
//或者直接比较仍然是不同???
//if(s.equals("字符串:abc")==true) this.b2.setText("相同");
}
catch(Exception e){
this.b1.setText("打开流的时候出错了!");//没有抛出任何异常。这行代码从来没有被激活。b1也是一个Button
}读取的时候正常,TextView也能够正确无乱码的显示"字符串:abc"。可是s和ss两个字符串却怎么也不相同?这到底是为什么呢?我把s和ss都用TextView来显示,至少从显示结果上看不出s和ss有不同。
我的错误出在哪呢?
string s="字符串:abc";
而且已经通过工具确定这个文本文件没有BOM。然后我在Android中把这个文本文件放入raw目录中打开,用TextView显示。另外界面上还有几个Button。
相关代码:String ss="字符串:abc";protected java.io.InputStreamReader fs;
protected java.io.FileInputStream fis;
protected java.io.BufferedReader sr;
protected java.io.InputStream ips;try
{
ips=this.getResources().openRawResource(R.raw.sample);
fs=new java.io.InputStreamReader(ips,"UTF-8");
sr=new java.io.BufferedReader(fs);
String s=sr.readLine();
this.mt.setText(s);
if(s.equals(ss)==true) this.b2.setText("相同");//b2是一个Button
//或者直接比较仍然是不同???
//if(s.equals("字符串:abc")==true) this.b2.setText("相同");
}
catch(Exception e){
this.b1.setText("打开流的时候出错了!");//没有抛出任何异常。这行代码从来没有被激活。b1也是一个Button
}读取的时候正常,TextView也能够正确无乱码的显示"字符串:abc"。可是s和ss两个字符串却怎么也不相同?这到底是为什么呢?我把s和ss都用TextView来显示,至少从显示结果上看不出s和ss有不同。
我的错误出在哪呢?
解决方案 »
- 一列edittext控件,如何在第一个输入完成 点确定时,失去焦点?
- 基于Android对象实例的自动化测试技术
- OMG!setMax居然都能报错啊~~~~~伤不起了,求助!!!!
- ListView 调用Scrollto后一滑动又返回起始点了
- 用虚拟机跑android4.0,总是出现各种程序的Unfortunately ,XXX has stopped
- 各位大虾,想问一下关于android应用开发
- view的layout_height属性是怎么来的
- android高手 求解答几个问题 多谢
- 急急急,请教大佬
- 一个类似美团的app里能否有多种不同功能?
- 安卓航班Android开发经典教程大总结1----基础编程及源码推送
- android JNI代码引用android源码头文件问题
读取文本的时候可能有空格,要把首位空格去掉
另外从我问题的描述就能够看出来。我是把我在PC上的软件移植到Android上,并且PC版本是使用了C#并工作正常。把数据文件拿到手机上打开出了问题。
因为是通过程序建立的文件。所以应该不会有空格的问题。因为我在写入的时候就是writeline(string)的。也正是因为是自己的程序写进去的而不是通过记事本手动编辑的。所以才会没有BOM的问题。
我也怀疑是编码的问题。因为我试验了一下用String类的getbyte方法比较两个字符串,结果还是不一样。
代码:
byte[] br=ss.getBytes("UTF-8");
byte[] bs=s.getBytes("UTF-8");if(br==bs) this.b2.setText("相同");//这行还是不执行
我刚试了一下,确实如您所说的,读出来的字符串比字符串原值长度多1。
长度都不一样,两个串当然不一样了。可是多出来的到底是不是换行符我还不确定。
而且这又引出另一个问题了。同样的代码C#版本没有任何问题。怎么到了Java这里就出了叉子了?
当然,首先还是得弄明白这长度到底怎么差的1?
this.b4.setText(ss.substring(ss.length()-1));//b4是个button活见鬼了!这两行执行完的结果都是c
多出来的不可见字符在字符串的开头。得到它的UTF-8编码是 -1 ???
而再读取第二行的时候,即再次readline(),开头就没有这个编码为 -1 的不可见字符了。
现在我怀疑我是不是被我用的工具软件给骗了!
这个 -1 会不会是文件头?
有熟悉BOM的吗?
这个 -1 是不是BOM?
单个-1不太象BOM.