Java(Android) - 无法检测字符串的第一个字符?

时间:2014-10-04 19:41:10

标签: android

不确定我是否错过了一些非常明显的东西。我确信我的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显示出来。奇怪的是,当代码运行时,只显示顶部(无条件)吐司。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

对于第一个,char'1'。您的代码中当前发生的是因为您将char与整数进行比较,char正在使用其字符代码转换为int。对于1,其出现为49,不等于整数1.您需要将char中检索到的Stringchar进行比较表示数字“1”,这意味着您需要将其写为'1'

对于第二个,您需要使用.equals()来测试String平等,而不是==。如果您使用具有相同内容的两个String对象st,那么您仍然会发现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(),但在一般情况下,如果你想测试nulls是等于你使用

"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))){

}