我有以下代码,回报令我困惑。我是java的新手,并不确定它为什么会以它的方式返回。任何帮助都会很棒。
如果数据有PE846
和A846
,则会返回engine
,ambo
和engineambo
。我希望只返回engineambo
。
String soundString = "";
if (data.contains("PE846")) {
soundString += "engine";
betaString = "Engine : ";
sign = engine;
}
if (data.contains("A846")) {
soundString += "ambo";
betaString += "Ambo : ";
sign = ambo;
}
if (data.contains("MD846")) {
soundString += "medic";
betaString += "Medic";
sign = medic;
}
log.info(betaString + " Alerted");
{
new AudioPlayer("sounds/" + soundString + ".wav").start();
log.info(soundString);
}
答案 0 :(得分:5)
您可以尝试逐行搜索代码。如果它包含PE846和A846(但不包含MD846),那么它将运行前两个条件块,从而执行如下:
if (data.contains("PE846")){ // The string does contain PE846, per your question
soundString += "engine"; // soundString = "" + "engine" = "engine"
betaString = "Engine : "; // betaString = "Engine : "
sign = engine; // sign = engine
}
if (data.contains("A846")){ // The string does contain A846, per your question
soundString += "ambo"; // soundString = "engine" + "ambo"
betaString += "Ambo : "; // betaString = "Engine : " + "Ambo : " = "Engine : Ambo : "
sign = ambo; // sign = ambo (overwriting the previous value, "engine")
}
if (data.contains("MD846")){ // The string does not contain MD846, per your question
soundString += "medic"; // not executed
betaString += "Medic"; // not executed
sign = medic; // not executed
}
log.info(betaString + " Alerted"); // betaString + " Alerted" => "Engine : Ambo : Alerted"
{
new AudioPlayer("sounds/"+ soundString +".wav").start();
log.info(soundString); // soundString => "engineambo"
}
答案 1 :(得分:1)
尝试重写代码,使其不具有经常重新分配的变量。 final
关键字将阻止变量的第二次分配,这将消除检查整个程序流以查看先前的分配是否对后面的分配产生影响的需要。此外,请避免使用+=
,除非您真的想将数据添加到现有数据中。
此外,如果您将某些内容设置为“正确的值”,则如果无法使用其他值,则不要继续更改它。
像
这样的东西String mystring;
if (data.contains("MD846")) {
mystring = "medic";
} else if (data.contains("A846")) {
mystring = "ambo";
}
由于数据设置为“MD846A846”,无法将mystring设置为“medicambo”。
答案 2 :(得分:0)
如果您的数据包含PE846-A846,它只包含PE,A和PE&&答:您应首先检查PE&&在一个if语句中,如果失败,则单独检查每个语句
答案 3 :(得分:0)
方法contains
不适合查找子字符串,因为它需要CharSequence
个对象而不是String
个对象。
在这种情况下,最好的选择是从类String中替换contains
的{{1}}方法。