2017-04-18 130 views
0

我有以下部分的代码,其中粒度的值是块。当我比较这些值时,它总是显示NO。相同的字符串不等于

System.out.println(granularity); 
    System.out.println(granularity.equalsIgnoreCase("block")?"YES":"NO"); 

    if(granularity.equalsIgnoreCase("BLOCK")){..... 

下面是代码输出:

block 
NO 

粒度值是从属性文件作为

granularity = prop.getProperty("Granularity"); 

这里是属性文件的卡扣:

.....Granularity = block 
...... 

can somebo dy解释了为什么两个字符串不相等?

+2

有在粒度字符串的末尾的空间。在比较时使用trim()来获取所有空白字符 –

+2

尝试'System.out.println(“'”+ granularity +“'”);'查看不可打印的字符。 – Zorglube

+0

尝试删除空格。 granularity.replaceAll( “\\ S +”, “”)equalsIgnoreCase。( “块”)? “YES”: “否”); – Sasang

回答

4

有可能是空白混淆了比较。在开始执行此操作:从属性文件

granularity = granularity.trim(); 
+0

这样做,你会丢弃可能故意放在属性开始或结束处的空白。更好的解决方案是将属性的内容设置为期望的值。 –

2

属性都有其价值=

所以这之后直:

Granularity = block 

导致价值" block"。您的文件更改为:

Granularity=block 
1

下面是代码的输出:

块 NO

如果你仔细检查你的输出,你会发现字块后的空白,所以它是"block " @ p-j-meisch评论编辑
您从输入中获得" block"。当您将其与"block"进行比较时,您会得到错误信息。

添加此行granularity = granularity.trim()

+1

问题是空格_before_字块,而不是_after_ –

0

这是每次在代码中使用trim字符串的最佳实践,尤其是当它被用作来自用户的输入时。

granularity.trim().equalsIgnoreCase("block")... 

或者同时将其存储在granularity

String granularity = someInputString.trim();