Я хотел бы использовать регулярное выражение для разбора сообщения, полученного через сокет в Android-клиенте, и поместить часть сообщения в список.Использовать регулярное выражение для разбора в Android
Это сообщение для разбора:
{Code=1;NumServices=3;Service1=World Weather Online;Link1=http://www.worldweatheronline.com/;Service2=Open Weather Map;Link2=http://openweathermap.org/;Service3=Weather;Link3=http://www.weather.gov/;}
и метод я использую:
private void parse(String mess) {
String Code="0";
Pattern pattern = Pattern.compile("Code=(.*?);");
Matcher matcher = pattern.matcher(mess);
while (matcher.find()) {
Code = matcher.group(1);
Log.d("Matcher", "PATTERN MATCHES! Code parsed "+Code);
// System.out.println("Code: "+Code);
}
Log.d("Matcher", "PATTERN MATCHES! Code not parsed "+Code);
if(Code.compareTo("1")==0){
// System.out.println("testing the parser");
// Pattern pattern1 = Pattern.compile(";CPU=(.*?);Screen");
Pattern pattern2 = Pattern.compile("NumServices=(.*?);");
Matcher matcher2 = pattern2.matcher(mess);
int number=0;
if (matcher2.find()) {
String numb = matcher2.group(1);
this.tester = numb;
Log.d("Matcher", "PATTERN MATCHES! numb services");
number = Integer.parseInt(numb);
}
else{
this.tester = "NOT FOUND";
Log.d("Matcher", "PATTERN MATCHES! match num failed");
}
int i;
for(i=1;i<=number;i++){
Pattern pattern3 = Pattern.compile(";Service"+i+"=(.*?);");
Pattern pattern4 = Pattern.compile(";Link"+i+"=(.*?);");
Matcher matcher3 = pattern3.matcher(mess);
Matcher matcher4 = pattern4.matcher(mess);
if (matcher3.find()) {
// Log.d("Matcher", "PATTERN MATCHES! services");
String serv = matcher3.group(1);
// this.tester = serv;
your_array_list.add(serv);
}
if (matcher4.find()) {
Log.d("Matcher", "PATTERN MATCHES! links");
String link = matcher4.group(1);
your_array_list2.add(link);
}
}
}
}
Ни один из log.d
не работает, так что я не могу проверить поток кода. Что странно, так это то, что я тестировал один и тот же код в Eclipse, и он работает. Когда я использую тост для отображения, он дает мне значение Код, но не Услуга. Есть ли ошибка где-то или регулярное выражение работает по-разному в Android?
Спасибо.
Почему ты просто не добавил Войти .d atte начало метода для проверки значения 'mess'? Это было бы очень полезно для вас ... и для нас !!! –
Я использовал тост, чтобы проверить значение и его сообщение, которое я отправляю с сервера: {Code = 1; NumServices = 3; Service1 = World Weather Online; Link1 = http: //www.worldweatheronline.com/; Service2 = Open Weather Map, Link2 = http: //openweathermap.org/; Service3 = Погода; Link3 = http: //www.weather.gov/;} – user2446260
Просьба пояснить, что вы имеете в виду, когда говорите, что не можете отобразить значение Сервиса. Вы имеете в виду Service1, Service2, Service3 или NumServices? – schtever