2015-11-17 6 views
2

Если у меня есть строка, которая выглядит примерно так:Наиболее эффективный способ получить подстроку после определенной другой подстроки

String text = "id=2009,name=Susie,city=Berlin,phone=0723178,birthday=1991-12-07"; 

Я только хочу, чтобы информация name и phone. Я знаю, как разбирать всю строку, но в моем конкретном случае важно только получить эти два «поля».

Так что это лучший/самый эффективный способ, чтобы мой метод поиска сделайте следующее:

поиск подстроки «имя =» и возвращает подстроку после того, как («Сьюзи») до тех пор, пока не достигнет следующий запятая

Мой подход был бы к:

  1. получить последний индекс «имя =» первого использование
  2. этого показателя затем как новый старт для моих годовыхов rsing

Любые другие предложения, возможно, о том, как это можно сделать более эффективно и с более конденсированным кодом? Спасибо за любой вклад

+0

Использование 'split'. И если у вас действительно есть проблема с производительностью, контрольный показатель. – Tunaki

+0

Используйте 'Pattern' и' Matcher' для захвата только того, что появляется после 'name =' и 'phone =' – TheLostMind

+0

, разбитого на ',', разбитого на '=', перебираем первый массив и проверяем, является ли элемент для второго split в индексе '0' равно тому, что вы ищете, и возвращаете следующий массив splittet, а также то, что является текущим индексом в вашем цикле в индексе' 1'. – SomeJavaGuy

ответ

6

Вы можете использовать следующие регулярные выражения, чтобы захватить ожидаемое слово после phone и name и получить FRIST группу из согласованного объекта:

(?:phone|name)=([^,]+) 

Что касается следующей команды, если это может случиться, чтобы иметь слово, которое содержит phone или name как более полный способ, чтобы вы могли запятнать запятую перед своим именем.

(?:^|,)(?:phone|name)=([^,]+) 

Подробнее о регулярном выражении http://www.regular-expressions.info/

+1

Gotta люблю хорошее регулярное выражение. –

+1

Один угловой случай, который вызовет разрыв этого регулярного выражения, - это когда есть поля, которые заканчиваются «именем» или «телефоном», например «имя пользователя» и «cell_phone». –

+0

Хорошо, может кто-нибудь подскажет, как я буду использовать это регулярное выражение в коде? (Извините, я знаю основы, но это выглядит немного слишком продвинутым ...) – lilisyn

0

Regex может быть более эффективным, но для удобства чтения, я

String text = "id=2009,name=Susie,city=Berlin,phone=0723178,birthday=1991-12-07"; 

    final Map<String, String> infoMap = Splitter.on(",") 
      .omitEmptyStrings() 
      .trimResults() 
      .withKeyValueSeparator("=") 
      .split(text); 

    System.out.println(infoMap.get("name")); 
    System.out.println(infoMap.get("birthday")); 
Смежные вопросы