java - Java .contains() 的行为不像我预期的那样
问题描述
我有一个问题,在寻找子字符串时.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;
}
结果是真的,所以.contains
不是问题,而是我if()
似乎没有将布尔值评估为真并且不会导致return true
执行。
我现在认为这是我的 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"
直接跳转到函数的最后一行( ) ……就好像中断循环一样。return false;
if (result) {
if
更新 2/2:
很简单,即使是我的函数中最简单的if
语句也会导致代码跳转到函数的最后一行并返回false
。例如:
if(true == true){
return true
}
在调试模式下单步执行时会发生这种情况,并且编码日志在未附加到窃听器时也会显示相同的结果。
从函数返回后every 照常进行。没有错误或警告。
重新安装 Android Studio,尝试不同的模拟器和物理 Android 设备并没有解决问题。
重命名函数并不能解决问题。
将函数的返回类型从更改boolean
为Boolean
确实解决了该问题。
我很清楚这些类型的差异,但我仍然对为什么会出现这个问题感到困惑。我只能假设以这种方式解决的更改方法签名是在编译时发生的一些时髦的事情。
我现在将问题悬而未决,因为即使更改返回类型为我“解决了”问题,我仍然不满意我会知道为什么......可能永远不会。
希望对这些问题有更多了解的人可以启发!
解决方案
你为什么不尝试使用:
if (this.fileName.toLowerCase().contains(extension.toLowerCase()==true){
}
推荐阅读
- python - 处理要预测的元组中的分类值
- python - 带有 SSL 证书的 Django 请求
- c# - 如何在 UWP 中将蓝牙设备映射到音频设备?
- .net-core - 如何使用 ef core 3.1 管理基于 .net 4.7、ef 6 和 .net core 3.1 的项目?
- python - Pandas pivot table with different conditions in aggfunc
- javascript - 不能在 Vuex Mutation 中使用解构赋值
- python - 迭代 JSON 以获取某些元素并在之后使用它们
- nginx - 为什么 nginx URL 最后没有斜线就不能工作?
- python - 格式化德语的刻度标签,即,点作为千位分隔符,逗号作为小数分隔符
- excel - 为什么我的 VBA ComboBox 在我输入之前是空白的