首页 > 解决方案 > Java equals() 看似返回错误的布尔值

问题描述

因此,我的应用程序将用户先前连接到的蓝牙设备的名称保存在 SharedPreferences 中,这与当前配对设备的所有名称相比,因此打开应用程序可以立即连接到所述设备。这是通过这段代码完成的:

sharedPreferences = getApplicationContext().getSharedPreferences("BtNames", MODE_PRIVATE);
keys = sharedPreferences.getAll();
for(BluetoothDevice device : pairedDevices) {
                try {
                    for (Map.Entry<String, ?> entry : keys.entrySet()) {...}

这将循环通过配对设备和 SharedPreferences 的条目,其值由以下代码访问:

String device_name = device.getName();
String name = entry.getValue().toString();

现在这两个都运行良好,entry.getValue()... 返回之前连接的设备的确切名称。尝试通过以下方式比较两个字符串时会出现问题:

device_name.equals(name)

即使两个字符串在记录时看起来完全相同,这也会返回 false:

E/FaceTracker: EV3LO
E/FaceTracker: EV3LO

我已经尝试用任何内容替换所有空格,但这也没有用。也许我忽略了一些东西,但目前我真的不知道出了什么问题。提前感谢您的回答。

标签: javaandroidandroid-studio

解决方案


问题是字符串末尾或开头的不可打印且非 ASCII 字符。请尝试以下脚本:

name.replaceAll("\\P{Print}","");

如果没有,我希望它有所帮助并祝你好运


推荐阅读