我有以下代码,从一个方法复制/粘贴:
String harmonicFile;
...
...
harmonicFile = String.format("%04d%s",this.number, this.suffix.toUpperCase()) + ".tch";结果看起来不错,但我还有一些乐趣:
我把这个字符串传递给另一个包含这个的方法:
if(filename.equals(file)){
return file;
}fileName是传入的值,file是资产文件系统的匹配项。假设文件是“0062.tch”。在Intellij IDEA调试器中检查文件名显示它等于“0062.tch”,但返回语句从未被击中。仔细检查,我可以看到文件名被填充了8个空字符(\ u0000)。
我有两个问题:
为什么字符串被填充?
在IDEA中,打破if语句,然后使用表达式计算器(Alt-F8)显示filename.equals(file)为true,但是在运行时通过我的代码逐步显示它不是。我认为这是IDEA评估表达式和Dalvik VM的方式中的一些低级差异?我认为虚拟机是正确的,因为文件名确实不等于文件。
感谢您的任何见解。
西蒙
[编辑]我相信,其余的代码是不相关的,但无论如何,这些意见删除,以节省空间。
public String filePathForHarmonicFile(){
String harmonicFile;
int number = this.number;
if(this.number < 0){ return "";}
if(number<10000 && this.suffix.length()<=1){
harmonicFile = String.format("%04d%s",this.number, this.suffix.toUpperCase()) + ".tch";
}else{
harmonicFile = String.format("%s%s",this.number,this.suffix.toUpperCase()) + ".tch";
}
return SCFileManager.getAssetFilePath("",harmonicFile);
}
public static String getAssetFilePath(String rootOfSearch, String filename){
try {
// get a list of all file entries in the search root
String[] files = ThisApplication.getContext().getAssets().list(rootOfSearch);
for (String file:files){
String newRoot;
if (rootOfSearch.equals("")){
newRoot = file;
} else {
newRoot = rootOfSearch + File.separator + file;
}
if (TidesPlannerApplication.getContext().getAssets().list(newRoot).length>0){
String thisFile = getAssetFilePath(newRoot,filename);
if (!thisFile.equals("")){
return thisFile;
}
} else {
if(file.equals(filename)){
return file;
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
return "";
}我知道这最后一种方法很丑陋,但如果有人知道更好的方法来处理资产中子文件夹中的7.5k文件,那么我非常感谢 - AssetManager是$%^&*脑死亡!