不确定我是否错过了一些非常明显的东西。我确信我的String
如下:
1This is a test message
我正在尝试检测第一个字符是否为'1',所以这里是我的一些代码:
//This outputs '1'
Toast noCmd = Toast.makeText(Play.this, decodedMessage.substring(0,1), Toast.LENGTH_SHORT);
noCmd.show();
if (decodedMessage.charAt(0) == 1) {
noCmd = Toast.makeText(Play.this, "This should show up", Toast.LENGTH_SHORT);
noCmd.show();
noCmd = Toast.makeText(Play.this, finalMessage + " from " + sender, Toast.LENGTH_SHORT);
noCmd.show();
}
if (decodedMessage.substring(0,1) == "1") {
noCmd = Toast.makeText(Play.this, "This should show up", Toast.LENGTH_SHORT);
noCmd.show();
noCmd = Toast.makeText(Play.this, finalMessage + " from " + sender, Toast.LENGTH_SHORT);
noCmd.show();
}
正如你所看到的,我正在尝试两种方法来使if语句中的toast显示出来。奇怪的是,当代码运行时,只显示顶部(无条件)吐司。
有什么想法吗?
答案 0 :(得分:1)
对于第一个,char
是'1'
。您的代码中当前发生的是因为您将char
与整数进行比较,char
正在使用其字符代码转换为int
。对于1
,其出现为49,不等于整数1.您需要将char
中检索到的String
与char
进行比较表示数字“1”,这意味着您需要将其写为'1'
。
对于第二个,您需要使用.equals()
来测试String
平等,而不是==
。如果您使用具有相同内容的两个String
对象s
和t
,那么您仍然会发现s==t
将显示为false,除非它们恰好指向在相同的内存位置(即,它们是相同的实例)。要检查它们是否具有相同的内容,请检查
s.equals(t)
而不是
s==t
因此,总之,制作第一个
if (decodedMessage.charAt(0) == '1') {
//toast stuff
}
和第二个
if ("1".equals(decodedMessage.substring(0,1))) {
//toast stuff
}
顺便说一句,原因是不写
if (decodedMessage.substring(0,1).equals("1")) {
//toast stuff
}
相反,如果您致电String
的{{1}}为.equals()
,那么您最终会得到null
,这通常是您要避免的。实际上在这种情况下它会没问题,因为NullPointerException
调用不会返回substring()
,但在一般情况下,如果你想测试null
和s
是等于你使用
"something"
而不是
"something".equals(s)
以防s.equals("something")
为s
。
答案 1 :(得分:1)
1
是一个值为1的整数。如果您需要ASCII 1
,请在单引号中使用'1'
,其整数值为49。
要比较字符串,请使用equals()
而不是==
。见How do I compare strings in Java?
答案 2 :(得分:0)
要比较您需要使用equals
方法的字符串:
if("1".equals(decodedMessage.charAt(0))){
}