2014-11-18 4 views

ответ

4

просто использовать положительные и положительные просмотра назад LookAhead утверждение, как показано ниже,

(?<=item=).*?(?=&) 

ИЛИ

(?<=item=)[^&]*(?=&) 

Пояснение:

  • (?<=item=) строка бею ch preceeds должно быть ietm=
  • [^&]* Сопрягать любой символ, но не & символ ноль или более раз.
  • (?=&) Характер, который следует за матчем, должен быть &.

Код:

String s = "item=somevalue&user=user1"; 
Pattern regex = Pattern.compile("(?<=item=).*?(?=&)"); 
Matcher matcher = regex.matcher(s); 
while(matcher.find()){ 
     System.out.println(matcher.group(0)); 
} 

Выход:

somevalue 
1

Попробуйте следующий код:

String test= "item=somevalue&user=user1"; 
String tok[]=test.split("&"); 
String finalTok[]=tok[0].split("="); 
System.out.println(finalTok[1]); 

Выход:

somevalue 
+0

Этот asumes, что значение элемента находится в первой пары ключ/значение. – Udo

0
public static void main(String[] args) { 
     String str = "item=somevalue&user=user1"; 
     String result = "item=somevalue&user=user1".substring(str.indexOf("=") + 1, str.indexOf("&")); 
     System.out.println(result); 
} 

Выход:

SomeValue

0

Одно из решений линии!

System.out.println(string.substring(string.indexOf("=")+1, string.indexOf("&"))); 

Или

, в случае если 'SomeValue' место изменяется добавить следующий код!
string = "user=user1&item=somevalue";
System.out.println(string.substring(string.lastIndexOf("=")+1));

+0

Нет, если строка '' user = user1 & item = somevalue''. – Udo

+0

Пожалуйста, прочитайте вопрос еще раз. Он/она упоминается в скобках »(т. Е. Подстрока после элемента = и до &). Значит, место «somevalue» не изменится по вопросу. –

+0

Он написал: «Я получил строку LIKE this». LIKE означает, что это пример. Что такое исправление и что может измениться, не объясняется. Он выглядит как часть запроса URL-адреса, поэтому порядок или количество параметров могут отличаться. – Udo

0

Разбиение строки на специальных символов является часто требуется задача, на мой взгляд, регулярное выражение является довольно излишним и имеет плохую производительность для такой простой задачи. Для часто используемой задачи все должны иметь некоторые исполняемые строки.

например.Вы можете сделать это

for (String s : splitToIterable(str, '&')) { 
    if (s.startsWith("item=")) { 
     String itemValue = s.substring(5); 
    } 
} 

, если у вас есть вспомогательный метод, как этот

public static Iterable<String> splitToIterable(final String str, final char delim) { 
    if (str == null) { 
     return null; 
    } 

    return new Iterable<String>() { 
     public Iterator<String> iterator() { 
      return new Iterator<String>() { 
       int lastIndex = 0; 
       String next = fetchNext(); 

       public boolean hasNext() { 
        return next != null; 
       } 

       public String next() { 
        if (next == null) { 
         throw new NoSuchElementException(); 
        } 
        String result = next; 
        next = fetchNext(); 
        return result; 
       } 

       public String fetchNext() { 
        if (lastIndex == -1) { 
         return null; 
        } 
        String next; 
        int i = str.indexOf(delim, lastIndex); 
        if (i > -1) { 
         next = str.substring(lastIndex, i); 
         lastIndex = i + 1; 
        } 
        else { 
         next = str.substring(lastIndex); 
         lastIndex = -1; 
        } 
        return next; 
       } 

       public void remove() { 
        throw new UnsupportedOperationException(); 
       } 
      }; 
     } 
    }; 
} 
Смежные вопросы