У меня есть очень простое соединение через сокет TCP с удаленным устройством, которое я могу опрашивать для получения статуса.
Помимо программирования сокетов, которое я в основном выяснил с помощью asynctask, я пытаюсь найти способ разобрать возвращаемую строку.
- Я запрашиваю устройство с чем-то вроде «VOL?»
- Устройство отвечает громкостью 12 различных аудиовыходов следующим образом:
"VOL: 33,0,21,12,0,43,0,0,0,0,20,0"
Символ «:» всегда и только возвращается после эха исходной команды, поэтому я могу использовать все, что идет перед двоеточием, чтобы пометить, какой ответ приходит. (VOL, BAS, MUT, TRE, BAL , так далее)
В случае с VOL я просто хочу распределить все, что находится между запятыми, чтобы я мог разделить и поместить в массив тома всех зон.
Единственное, о чем я могу думать, - это взять длину строки, а затем запустить цикл for, ища запятые одну за другой, но это кажется смешно грязным:
int oldPos = 0; //used in the upcoming 'if clause' to mark where the last comma was found
int y = 0; //used to old the resulting value's array position
String strIncoming; = //the incoming TCP string
for(int x = 0; x <= strIncoming.length(); x++){
if(",".equals(strIncoming[x]){
volzoneVal[y] = strIncoming.subString(oldPos,x);
oldPos = x;
y++;
}
}
Должен быть ДОЛЖЕН быть лучший способ (и я даже не уверен, что это сработает, я впервые набираю его здесь, когда решаю эту проблему, чтобы она не запускалась и не компилировалась)
Есть ли лучший способ сканировать строку в поисках совпадений?