我有一个Unicode(“Windows Notepad Unicode”或UTF-16LE)文本文件,我从中读取这样的行:
FileInputStream is = new FileInputStream(cmdFile);
BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-16LE"));
String line = reader.readLine();
现在我需要检查行是否以特定字符序列开头:
if (line.startsWith("[COMMAND]")) ...
但即使行实际上“开始”了这个字符序列,这也会返回false。
在检查startsWith
的源代码时,我可以看到比较是逐字逐句完成的。但据我所知,Java实际上在内部使用这种特殊编码表示字符串,那么为什么比较会失败呢?在这种情况下,比较的正确方法是什么?要记住的一件事是将String
转换为需要编码的字节数组,然后比较两个字节数组,但这似乎是一种相当粗略的方法,是否有更优雅的方式?
答案 0 :(得分:0)
您可以尝试将line
的字符分别打印为整数,以检查字符串的实际组成方式。在我的应用程序中我只使用
BufferedReader reader = new BufferedReader(new
InputStreamReader(is));
并且能够正确使用String的split方法......所以也许startsWith
也能正常工作。
答案 1 :(得分:0)
经过一些研究并使用String.getBytes()
,可以看出问题出在字节顺序标记或BOM上。 Android Studio没有在工具提示中显示那些额外的字符作为问号,因为它通常会让我感到困惑。