字符串相等比较

记一个字符串比较的小坑!!

 

在Java中,我们用equals()来比较两个字符串的内容是否相等。

equals()方法是继承于顶级类Object的,然后又在String类中被覆写,专门用来比较两个字符串的内容是否相同!

典型用法为:str1.equals(str2)    输出为true,则表示str1,str2两个字符串内容相等;反之,则为不相等!

我的代码使用情况是这样的:从sqlite数据库取出数据,因为数据中有一个字段是FileName,我需要判断有哪些记录的FileName是一样的,然后把一样的记录抓在一起,然后再去使用。于是我先用了ORDERBY子句对数据输出进行排序,然后定义了一个FileNameTemp来做临时变量,用于存储当前记录中的FileName,并且判断它跟上一条记录的FileName是否一样。

核心代码如下:

String fileNameTemp=null;

while (rs.next()){

    //取出当前记录的fileName

String  fileName=rs.getString(1);   

//判断字符串内容是否相等

if( ! fileNameTemp.equals(fileName)){

fileNameTemp=fileName;

//下面的具体操作省略

.............
}else{

//下面具体操作省略

..................
}

}

运行的结果是:第一条记录判断的时候,本该进入的if操作没有进入,反而进入了else代码块中。

进入debug调试,发现fileName是有值的,说明数据库没问题,发现第一次判断时,fileNameTemp是null。照理来讲

! fileName.equals(fileNameTemp)应该返回true,然后进入if 代码块的。事实是,他先进入了else代码块。

经过思考,发现问题出现在第一次时,fileNameTemp=null; null表示空,这让equals()判断出错!!!最后将if里面的判断换为

if( ! fileName.equals(fileNameTemp))  调换了两个字符串的位置,问题得以解决!

总结:在使用equals()判断两个字符串内容相等时,一般情况下,str1.equals(str2)和str2.equals(str1)效果是一样的,但是如果某个字符串可能为null,则把这个字符串位置放在equals()的参数位置!如果两个字符串都有可能为null时,最好在一开始的时候进行判断,例如if(str == null)

 

 

 

 

### Python 中的字符串相等比较 在 Python 编程中,可以通过 `==` 运算符来判断两个字符串是否相等。此运算符会逐字符对比两个字符串的内容,如果完全相同则返回 `True`,否则返回 `False`[^1]。 ```python str1 = "hello" str2 = "world" if str1 == str2: print("Strings are equal.") else: print("Strings are not equal.") ``` 需要注意的是,在 Python 中区分大小写,因此 `"Hello"` 和 `"hello"` 将被视作不同的字符串。 --- ### Shell 脚本中的字符串相等比较 在 Shell 脚本中,可以使用 `[ ]` 或双括号 `[[ ]]` 来执行条件测试,并通过 `=` 或 `==` 判断字符串是否相等。单等于号 `=` 是 POSIX 标准推荐的方式,而双等于号 `==` 更加直观且兼容性强[^2][^4]。 #### 使用单方括号 `[ ]` ```bash name="root" pwd="admin" if [ "$name" = "root" ] && [ "$pwd" = "admin" ]; then echo "Credentials match." else echo "Invalid credentials." fi ``` #### 使用双方括号 `[[ ]]` ```bash name="root" pwd="admin" if [[ "$name" == "root" && "$pwd" == "admin" ]]; then echo "Credentials match." else echo "Invalid credentials." fi ``` 注意:在 Shell 中同样区分大小写,因此 `"Root"` 和 `"root"` 不会被认为是相同的字符串。 --- ### AWK 中的字符串相等比较 在 AWK 脚本中,可以直接利用 `==` 运算符来进行字符串相等比较。AWK 的语法类似于 C 语言,因此其逻辑结构也较为简洁明了[^3]。 ```awk BEGIN { string1 = "test" string2 = "test" if (string1 == string2) { print "Strings are equal." } else { print "Strings are not equal." } } ``` 此外,当需要将字符串形式的数字转换为数值时,可以在表达式中加上 `0` 实现强制类型转换。 ```awk BEGIN { num_str = "123" num_val = num_str + 0 print "Original:", num_str, ", Converted:", num_val } ``` --- ### 总结 无论是 Python、Shell 还是 AWK,都提供了简单易用的方式来完成字符串相等比较操作。具体方法如下: - **Python**: 使用 `==`。 - **Shell**: 使用 `[ ]` 或者 `[[ ]]` 结合 `=`/`==`。 - **AWK**: 同样支持 `==` 进行字符串比较。 这些工具均严格遵循大小写的敏感性原则,开发者需特别留意这一点以避免潜在错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值