2011-10-03 102 views
0

我想知道我的字符串是否具有= & &序列。如果是的話,我想編碼第二個&。如何使用Java正則表達式我可以找到它?Java正則表達式查找字符串中的字符序列

我的字符串是這樣的:

A =貓& B =狗貓& & C =猴子

感謝 切塔尼亞

+0

您是否在尋找確切'= &&'的字符串,也可以有其他的字符之間'=','&',第二個'&'? –

+0

a =貓&b =狗&貓&c =猴子 不完全= &&,但有一些字符在=和&和&之間,如上面的字符串。 –

回答

3

像Mosty和Ted建議的,也許最好的方法是通過檢測和轉義'&'。

但是,如果你想有一個單一的正則表達式做的工作對你來說,那就是:

String s = "a=cat&b=dog&cat&c=monkey"; 

s = s.replaceAll("&(?=[^=]*&)", "&"); 

System.out.println(s); 
+0

它的工作。你能解釋一下這個正則表達式嗎? –

+0

很高興幫助:) 正則表達式有兩種基本部分組成: '&'' (?= [^ =] *)' 第一部分檢測 '&',這是你想要的字符取代。 第二部分更棘手。您需要確保在剛剛檢測到的'&'之後,下一個字符序列包含另一個「&」,並且在下一個「&」之前包含另一個「=」。 –

+0

您可以通過使用零寬度積極的前瞻來做到這一點。這個特殊的構造讓我們測試一下您的比賽中「前方」角色的一個給定條件。 語法如下: '(?= X)' 其中X是您想要測試的條件。在這種情況下,X是: '[^ =] *&' 或換句話說:「任何不是'='的字符,零次或多次,後跟一個'&'」。所以最後你得到'&(?= [^ =] *&)',這意味着:「一個'&'的下一個字符序列沒有'='直到下一個'&'」 。 –

2

你爲什麼不只是split它?

通過「&」第一次分裂,然後在第二個元素

0

您可以使用此格式:

if (string.contains("=&&")) 
{ 
// do something 
} 
else 
{ 
// do something else 
} 

我不知道你所說的「編碼&」,雖然意思。你能澄清嗎?

+0

忘記編碼。道歉。 我想知道a =貓&b =狗&貓&c =猴子有=和一些字符&和一些字符和模式在裏面。 –

0

在形成連接的名稱 - 值對字符串之前,在值中轉義&會更容易。但是,鑑於已編碼的字符串,我覺得Mosty的建議的變體可能更適合:

String escapeAmpersands(String nvp) { 
    StringBuilder sb = new StringBuilder(); 
    String[] pairs = nvp.split("&"); 
    if (pairs[0].indexOf('=') < 0) { 
     // Maybe do something smarter with "a&b=cat&c=dog"? 
     throw new Exception("Can't handle names with '&'"); 
    } 
    sb.append(pairs[0]); 
    for (int i = 1; i < pairs.length; ++i) { 
     String pair = pairs[i]; 
     sb.append(pair.indexOf('=') < 0 ? "&amp;" : "&"); 
     sb.append(pair); 
    } 
    return sb.toString(); 
} 

這很可能是比普通快試圖用正則表達式來做到這一點。

相關問題