如何轉換角色,我想改用「+」到「 - 」和「 - 」到「+」使用正則表達式中的Java
例如:+ + - + - + +
到- - + - + - -
我怎樣才能做到這一點使用正則表達式
我試過使用replaceAll()
函數,但它似乎不工作,因爲兩個替換不能同時發生。
如何轉換角色,我想改用「+」到「 - 」和「 - 」到「+」使用正則表達式中的Java
例如:+ + - + - + +
到- - + - + - -
我怎樣才能做到這一點使用正則表達式
我試過使用replaceAll()
函數,但它似乎不工作,因爲兩個替換不能同時發生。
你可以先更換未使用的字符的東西之一:
s = s.replace('-', '#');
s = s.replace('+', '-');
s = s.replace('#', '+');
一種不可思議的方式實現這一目標是在人物之一拆分,假設+。然後全部替換 - 在所有結果塊中加+,並作爲最後一步將所有塊連接爲 - 。
String str = "++--+++---+-++";
String[] split = str.split("[+]", Integer.MAX_VALUE);
String[] chunks = new String[split.length];
for (int i = 0, l = split.length; i<l; i++) {
chunks[i] = split[i].replaceAll("-", "+");
}
String result = String.join("-", chunks);
如果您正在使用Java 8,它現在支持一些更實用的樣式編程,其中包括諸如map之類的函數。 Map可以應用於流,在這種情況下,可以使用從String創建的Ints流。地圖應用的功能(在這種情況下lambda函數)該流的每個成員,並輸出別的東西:
.map(x -> x)
將基本上什麼也不做,因爲這將輸出你輸入時,流將保持不變。在lambda函數中應用邏輯允許您根據某些條件確定輸出。
然後將這個轉換後的流一起收回到字符串生成器中,然後作爲字符串輸出。
String str = "+-+";
String inverted = str.chars().map(x -> x == '+' ? '-' : '+')
.collect(StringBuilder::new,
StringBuilder::appendCodePoint,
StringBuilder::append)
.toString();
// inverted now contains "-+-"
這樣就沒有必要改變,以中間的性格和過去的字符串兩次,你只需要在每一個字符看一次。
好主意,你有一個小東西,你應該用'\\ +'改變''''或者你可以使用'replace'而不是'replaceAll'就像這樣's.replace(「 - 」,「#」 「).replace(」+「,」 - 「)。replace(」#「,」+「)';) –
正如先前的註釋所指出的,replaceAll將正則表達式作爲其第一個參數,因此代碼提供不管用。相反,+應該用\\ +替換,以便在Java和正則表達式中都可以轉義並搜索實際的+。 –
我會更新答案。 – john16384