2016-02-06 48 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- expressions.info/repeat.html#greedy)Try [。*?](http://www.regular-expressions.info/repeat.html#lazy)代替'。*' –

+0

Use ['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-- & AXY = asdsd &衝壓= 8 GB & 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

相關問題