Обработка строки Android из потока TCP - PullRequest
0 голосов
/ 15 июля 2011

У меня есть очень простое соединение через сокет TCP с удаленным устройством, которое я могу опрашивать для получения статуса.

Помимо программирования сокетов, которое я в основном выяснил с помощью asynctask, я пытаюсь найти способ разобрать возвращаемую строку.

  1. Я запрашиваю устройство с чем-то вроде «VOL?»
  2. Устройство отвечает громкостью 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++;
            }
         }

Должен быть ДОЛЖЕН быть лучший способ (и я даже не уверен, что это сработает, я впервые набираю его здесь, когда решаю эту проблему, чтобы она не запускалась и не компилировалась)

Есть ли лучший способ сканировать строку в поисках совпадений?

Ответы [ 3 ]

0 голосов
/ 15 июля 2011

Сначала разделите строку на двоеточие, а затем split [0] - ваш тип.Затем возьмите split [1] и разделите ее запятой, и у вас будут все 12 различных выходных данных, готовых к работе (просто конвертируйте их в целые числа).

0 голосов
/ 15 июля 2011

Используйте функцию разделения строки Java и разделите запятую в качестве разделителя.После этого у вас будет массив ваших параметров.Если вы добавите какой-либо символ «конечная строка» к каждому ответу, вы будете знать начало и конец на основе двоеточия для начала и вашего конечного символа для конца.

0 голосов
/ 15 июля 2011

strIncoming.split (":") [0] даст вам то, что было до первого двоеточия

strIncoming.split (":") [1] .split (",") даст вам массивотдельных строк

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...