Я получил строку, как это:Извлечение подстроки в Java
string = "item=somevalue&user=user1";
И мне нужно найти способ извлечения, в Java, подстрока «SomeValue» (т.е. подстрока после пункта = и перед &) ,
Я получил строку, как это:Извлечение подстроки в Java
string = "item=somevalue&user=user1";
И мне нужно найти способ извлечения, в Java, подстрока «SomeValue» (т.е. подстрока после пункта = и перед &) ,
просто использовать положительные и положительные просмотра назад 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
Попробуйте следующий код:
String test= "item=somevalue&user=user1";
String tok[]=test.split("&");
String finalTok[]=tok[0].split("=");
System.out.println(finalTok[1]);
Выход:
somevalue
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
Одно из решений линии!
System.out.println(string.substring(string.indexOf("=")+1, string.indexOf("&")));
Или
, в случае если 'SomeValue' место изменяется добавить следующий код!
string = "user=user1&item=somevalue";
System.out.println(string.substring(string.lastIndexOf("=")+1));
Нет, если строка '' user = user1 & item = somevalue''. – Udo
Пожалуйста, прочитайте вопрос еще раз. Он/она упоминается в скобках »(т. Е. Подстрока после элемента = и до &). Значит, место «somevalue» не изменится по вопросу. –
Он написал: «Я получил строку LIKE this». LIKE означает, что это пример. Что такое исправление и что может измениться, не объясняется. Он выглядит как часть запроса URL-адреса, поэтому порядок или количество параметров могут отличаться. – Udo
Разбиение строки на специальных символов является часто требуется задача, на мой взгляд, регулярное выражение является довольно излишним и имеет плохую производительность для такой простой задачи. Для часто используемой задачи все должны иметь некоторые исполняемые строки.
например.Вы можете сделать это
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();
}
};
}
};
}
Этот asumes, что значение элемента находится в первой пары ключ/значение. – Udo