2016-02-06 3 views
1

Как я могу заменить строку между первым & и следующим & только:заменить строку между двумя первыми встреченным «&» гольцами

public class Test02 { 


public static void main(String[] args) { 
    String xyz = "&axy=asdsd&ram=2 gb4 gb&asd=sdsd&"; 

    String x = xyz.replaceAll("&ram=.*&", "&ram=8 gb&"); 

    System.out.println(x); 
    } 
} 

моего вход - &axy=asdsd&ram=2 gb4 gb&asd=sdsd& моего выхода - &axy=asdsd&ram=8 gb&

, но я хочу - &axy=asdsd&ram=8 gb&asd=sdsd&

только хочу изменить средний часть.

Я создаю поисковый фильтр. Если бы какой-либо API для построения запроса существовал, я бы с удовольствием узнал.

+2

(HTTP [Берегись жадностью]: //www.regular- expression.info/repeat.html#greedy) Попробуйте [. *?] (http://www.regular-expressions.info/repeat.html#lazy) вместо '. *' –

+0

Используйте ['String x = xyz.replaceFirst ("& ram = [^ &] * &", "& ram = 8 gb &");'] (http://ideone.com/B7Fzia). Используйте «replaceFirst» для выполнения только одной операции S & R. –

ответ

0

Вы можете использовать метод split на своей Строке, чтобы разбить его на свои жетоны с заданным разделителем. Затем просто замените нужный вам индекс с новым желаемым значением.

Что-то вроде этого (не проверено)

String text = "A&B&C"; 
String delim = "&"; 
String[] elements = text.split(delim); 
elements[0]= "D"; 
String result = ""; 
for (String token : elements) { 
    result += token + delim; 
} 
System.out.println(result.substring(0, result.length() - delim.length())); // "D&B&C" 
1

Благодаря кисточки,

это работает ...». ? ' вместо '. '..

общественного класс Test02 {

public static void main(String[] args) { 
    String xyz = "&axy=asdsd&ram=2 gb4 gb&asd=sdsd&"; 

    String x = xyz.replaceAll("(&ram=.*?)&", "&ram=8 gb&"); 

    System.out.println(x); 
} 

}

теперь из put-- & аха = asdsd & барана = 8 гб & ASD = SDSD &

+0

'replaceAll' будет соответствовать и заменять больше, чем вам нужно, в других строках с большим количеством' & 'в них. –

0
public static void main(String[] args) { 
    String xyz = "&axy=asdsd&ram=2 gb4 gb&asd=sdsd&"; 
    int firstAndPosition =xyz.indexOf('&',1); 
    int secondAndPosition =xyz.indexOf('&',firstAndPosition+1); 
    String stringToReplace = xyz.substring(firstAndPosition, secondAndPosition +1); 

    //The do your stuff 
    String x = xyz.replaceAll(stringToReplace, "&ram=8 gb&"); 
    System.out.println(x); 
    } 
} 
0

Вам нужно использовать отрицательный класс символов [^&], соответствующий любому символу, но & с * квантора (ноль или более вхождений) и рычагов String#replaceFirst() метод для выполнения только одну замену:

String xyz = "&axy=asdsd&ram=2 gb4 gb&asd=sdsd&"; 
String x = xyz.replaceFirst("&ram=[^&]*&", "&ram=8 gb&"); 
System.out.println(x); 
// => &axy=asdsd&ram=8 gb&asd=sdsd& 

См IDEONE demo

Смежные вопросы