我想知道我的字符串是否具有= & &序列。如果是的話,我想編碼第二個&。如何使用Java正則表達式我可以找到它?Java正則表達式查找字符串中的字符序列
我的字符串是這樣的:
A =貓& B =狗貓& & C =猴子
感謝 切塔尼亞
我想知道我的字符串是否具有= & &序列。如果是的話,我想編碼第二個&。如何使用Java正則表達式我可以找到它?Java正則表達式查找字符串中的字符序列
我的字符串是這樣的:
A =貓& B =狗貓& & C =猴子
感謝 切塔尼亞
像Mosty和Ted建議的,也許最好的方法是通過檢測和轉義'&'。
但是,如果你想有一個單一的正則表達式做的工作對你來說,那就是:
String s = "a=cat&b=dog&cat&c=monkey";
s = s.replaceAll("&(?=[^=]*&)", "&");
System.out.println(s);
它的工作。你能解釋一下這個正則表達式嗎? –
很高興幫助:) 正則表達式有兩種基本部分組成: '&'' (?= [^ =] *)' 第一部分檢測 '&',這是你想要的字符取代。 第二部分更棘手。您需要確保在剛剛檢測到的'&'之後,下一個字符序列包含另一個「&」,並且在下一個「&」之前包含另一個「=」。 –
您可以通過使用零寬度積極的前瞻來做到這一點。這個特殊的構造讓我們測試一下您的比賽中「前方」角色的一個給定條件。 語法如下: '(?= X)' 其中X是您想要測試的條件。在這種情況下,X是: '[^ =] *&' 或換句話說:「任何不是'='的字符,零次或多次,後跟一個'&'」。所以最後你得到'&(?= [^ =] *&)',這意味着:「一個'&'的下一個字符序列沒有'='直到下一個'&'」 。 –
你爲什麼不只是split它?
通過「&」第一次分裂,然後在第二個元素
您可以使用此格式:
if (string.contains("=&&"))
{
// do something
}
else
{
// do something else
}
我不知道你所說的「編碼&」,雖然意思。你能澄清嗎?
忘記編碼。道歉。 我想知道a =貓&b =狗&貓&c =猴子有=和一些字符&和一些字符和模式在裏面。 –
在形成連接的名稱 - 值對字符串之前,在值中轉義&
會更容易。但是,鑑於已編碼的字符串,我覺得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 ? "&" : "&");
sb.append(pair);
}
return sb.toString();
}
這很可能是比普通快試圖用正則表達式來做到這一點。
您是否在尋找確切'= &&'的字符串,也可以有其他的字符之間'=','&',第二個'&'? –
a =貓&b =狗&貓&c =猴子 不完全= &&,但有一些字符在=和&和&之間,如上面的字符串。 –