首页 文章

String.substring没有返回true

提问于
浏览
1

我正在研究Arduino和String.substring似乎没有正常运行,所以我想知道我可能做错了什么....

我的功能如下:

boolean processSerial()
{
     String buf;
     int iter = 0;
     char thisChar; 

     while(iter < 1000){
     if (Serial.available()) {
       #if ARDUINO >= 100 //For Arduino v1.0+
       {
         thisChar = Serial.read();
         buf += thisChar;
         //if(DEBUG){Serial.print(thisChar);}
       }  
       #else //For Arduino v0023 or earlier
         thisChar = Serial.read();
       #endif
     }
     iter++;
     }
     Serial.print(buf);
     Serial.print(buf.substring(0,10));

     if(buf.substring(1) == "GPGGA"){
        Serial.println("FOUND IT!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
        }
        Serial.println("And we're done");

}

模式“GPGGA”即将出现但子字符串未返回true .

我的Serial的输出如下:

$GPGGA,053540.000,3804.1237,N,07615.5232,W,1,7,1.39,117.5,M,-33$GPGGA,053And we're done

因此 buf 在字符串中显然有'GPGGA' . 再次显示'GPGGA'的最后一点是在字符串中打印字符0-10 . 为什么我的 if 语句没有返回true?

1 回答

  • 5

    buf.substring(1) 返回从第一个位置开始并一直持续到字符串结尾的子字符串 . 这将从 GPGGA 开始,但不等于 GPGGA .

    如果你知道你比较的字符串长度是5个字符,你可以使用

    if (buf.substring(1,1+5) == "GPGGA")
      /* ... */
    

    另请注意,不是预期返回true的 substring() 函数,而是比较运算符 == .

相关问题