我遇到一个问题,其中.contains()
在寻找子字符串时没有返回true
。
请参见以下代码段和图像,其中显示了以下代码的变量值。我的问题是表达式返回false
,而我认为它显然应该是true
。
if (this.fileName.toLowerCase().contains(extension.toLowerCase())){
return true;
}
我今天遇到了这个问题,在网上搜索后,看不到任何明显的迹象。
我使用文字尝试了相同的操作,但仍然无法得出正确的结果:
if ("Android App Image.jpg".toLowerCase().contains("jpg".toLowerCase())){
return true;
}
我将其细分为布尔值:
boolean result = ("Android App Image.jpg".contains("jpg"));
if (result) {
return true;
}
结果为true,所以不是.contains
的问题,而是我的if()
并未将布尔值评估为true,也没有导致return true
的执行。 / p>
我现在认为这是我的while循环的问题(下面的完整功能)。枚举是否异步运行?
public boolean isImage(){
String[] imageExtensions = {"jpg", "png", "bmp", "gif"};
for (String extension: imageExtensions) {
if (this.localFileURLString != null && this.localFileURLString.toLowerCase().contains(extension)){
return true;
}
boolean result = ("Android App Image.jpg".toLowerCase().contains("jpg".toLowerCase()));
if (result) {
return true;
}else{
Log.i("TEACH", "If evaluated false");
}
}
return false;
}
更新1/2:
我用硬编码的文字精简了整个函数,不再使用快速枚举,当我希望它返回false
时,它仍然返回true
:
public boolean isImage(){
String[] imageExtensions = {"jpg", "png", "bmp", "gif"};
for (int x = 0; x < imageExtensions.length; x++) {
// String extension = imageExtensions[x];
boolean result = ("Android App Image.jpg".toLowerCase().contains("jpg".toLowerCase()));
if (result) {
return true;
}else{
Log.i("TEACH", "If evaluated false");
}
}
return false;
}
该函数不会返回true
或不会执行"If evaluated false"
日志,它只是在评估行{{1之后,直接跳到函数的最后一行(return false;
) }} ...好像if (result) {
中断了循环。
更新2/2:
很简单,即使是函数中最简单的if
语句,也会导致代码跳到函数的最后一行并返回if
。例如:
false
在调试模式下逐步执行时会发生这种情况,并且在未附加Bugger的情况下,编码日志也显示相同的结果。
从函数返回后,每个都正常进行。没有错误或警告。
重新安装Android Studio,尝试使用其他模拟器和物理Android设备无法解决该问题。
重命名功能无法解决问题。
将函数的返回类型从if(true == true){
return true
}
更改为boolean
确实解决了该问题。
我很清楚这些类型的区别,但是对于为什么会出现此问题,我仍然感到困惑。我只能假设以这种方式解决方法签名更改问题在编译时就发生了。
我现在暂时不提问题,即使更改返回类型为我“解决了”问题,我仍然不满意,我会知道为什么...也许永远不会。
希望在这些问题上有很多知识的人能启发一切!
答案 0 :(得分:1)
为什么不尝试使用:
if (this.fileName.toLowerCase().contains(extension.toLowerCase()==true){
}
答案 1 :(得分:0)
您的搜索词产生假阳性。因为文件名字符串可以具有与扩展名匹配的子字符串。 为避免这种情况,您可以在搜索词前加一个点。
String[] imageExtensions = {".jpg", ".png", ".bmp", ".gif"};
这将很好地解决您的问题。 如果文件名中不规则使用DOT,则可能会产生误报。 希望能帮助到你。