java - 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
我已经尝试用任何内容替换所有空格,但这也没有用。也许我忽略了一些东西,但目前我真的不知道出了什么问题。提前感谢您的回答。
解决方案
问题是字符串末尾或开头的不可打印且非 ASCII 字符。请尝试以下脚本:
name.replaceAll("\\P{Print}","");
如果没有,我希望它有所帮助并祝你好运
推荐阅读
- python - scipy/optimize/slsqp.py c = concatenate((c_eq, c_ieq)) ValueError: 所有输入数组必须具有相同的维数
- php - FPDF:MULTICELL 生成报告
- perl - Perl 期望:对于 ssh 登录,如果一个错误的密码失败,如何尝试另一个密码?
- pandas - 用 scikitlearn 和 pandas 拟合 KDE 进行绘图。然而,分布在数据范围之外
- java - JSoup:难以提取单个元素
- typescript - Apollo 服务器中的打字稿语法
- mysql - 在 django 模型中存储时区假设?
- mongodb - mongodb:使用查找结果作为过滤的标准不适用于时间戳
- python - 如何在一条路线中调用多条路线?
- database - 创建新的BPMN proc时camunda数据库中存储了多少表数据