我正在寻找一种使用Arduino在2个字符串之间获取字符串的方法。这是源字符串:
Hello, my name is John Doe# and my favourite number is 32#.
输出必须是:
String name = "John Doe"; //Between "name is " and "#"
String favouriteNumber = "32"; //Between "number is " and "#"
如何通过Arduino实现这一目标?
我无法在网上找到有关此内容的任何信息。无论如何,C的这些例子都不起作用。我知道在Arduino中不建议使用String,但我必须这样做才能使事情变得更简单。
顺便说一句,这种使用'#'表示数据结束的方法并不是理想的方法,因为我希望输入更具人性化和更自然。 有人会建议另外一种方法吗?
提前致谢!
答案 0 :(得分:2)
函数midString找到两个其他字符串之间的子字符串" start"并且"完成"。如果这样的字符串不存在,则返回""。还包括测试代码。
void setup() {
test();
}
void loop() {
delay(100);
}
String midString(String str, String start, String finish){
int locStart = str.indexOf(start);
if (locStart==-1) return "";
locStart += start.length();
int locFinish = str.indexOf(finish, locStart);
if (locFinish==-1) return "";
return str.substring(locStart, locFinish);
}
void test(){
Serial.begin(115200);
String str = "Get a substring of a String. The starting index is inclusive (the corresponding character is included in the substring), but the optional ending index is exclusive";
Serial.print(">");
Serial.print( midString( str, "substring", "String" ) );
Serial.println("<");
Serial.print(">");
Serial.print( midString( str, "substring", "." ) );
Serial.println("<");
Serial.print(">");
Serial.print( midString( str, "corresponding", "inclusive" ) );
Serial.println("<");
Serial.print(">");
Serial.print( midString( str, "object", "inclusive" ) );
Serial.println("<");
}
答案 1 :(得分:-1)
刚刚搜索过这个并没有找到答案所以我做了一个。 我更喜欢使用String,因为代码可读性和简单性。 对我来说,比从我的arduino中挤出最后一滴果汁更重要。
String name = GetStringBetweenStrings("Hello, my name is John Doe# and my favourite number is 32#." ,"name is ","#");
String GetStringBetweenStrings(String input, String firstdel, String enddel){
int posfrom = input.indexOf(firstdel) + firstdel.length();
int posto = input.indexOf(enddel);
return input.substring(posfrom, posto);
}
注意第一个案例的罚款,但对于第二个案例,你必须将第二个过滤器sting改为“#”。所以它不会使用第一次出现的#