2013-04-15 30 views
0

我想用java中的一個名爲myStr的字符串替換所有出現的+ - with - 。 我也想從myStr中替換所有出現的 - with +。 下面的代碼兩行沒有在Java中實現這一點:轉義+ - 和 - 在java中

myStr.replaceAll("\\+-", "-"); 
myStr.replaceAll("\\--", "+"); 

誰能告訴我如何改變的這兩行代碼來完成所需的替代品?

我通常會盡量避免正則表達式,但不知道如何在沒有它們的情況下執行此操作。

+1

使用你想逃避的字符前的反斜槓:'\ + \ - '和'\ - \ - '。 – Jerry

+0

@Jerry謝謝。我試過newSubStr.replaceAll(「\ + \ - 」,「 - 」);但是eclipse現在給了我下面的錯誤信息:無效的轉義序列(有效的轉義序列是\ b \ t \ n \ f \ r \「\'\\) – CodeMed

+0

當你有' -',因爲它會打印' - +',不過我猜你希望它是'-'。 – Maroun

回答

5

你拋出函數的返回值。你可能想使用:

myStr = myStr.replaceAll("\\+-", "-").replaceAll("--", "+"); 

更新與附加信息從評論:

一定要保持replaceAll返回值。

myStr = myStr.replaceAll("\\+-", "-"); 

後來

myStr = myStr.replaceAll("--", "+"); 
+1

沒有必要逃離破折號 –

+0

這是一段時間,因爲我已經用Java中的正則表達式做任何事 – zzzzBov

+0

@zzzzBov謝謝,但這兩行代碼在我的代碼的不同部分,所以捆綁它們不是一種選擇,我只是爲了簡單起見而將它們放在一起。 – CodeMed

0
public static String escapePlusMinus(String myStr) { 
    Pattern pattern = Pattern.compile("[+-]-"); 
    Matcher matcher = pattern.matcher(myStr); 
    StringBuffer result = new StringBuffer(); 

    while (matcher.find()) { 
     if (matcher.group(0).equals("+-")) { 
      matcher.appendReplacement(result, "-"); 
     } 
     else { 
      matcher.appendReplacement(result, "+"); 
     } 
    } 
    matcher.appendTail(result); 

    return result.toString(); 
} 

escapePlusMinus("+-, --, +-, ---+---")"-, +, -, +--+"

的最後一個記號匹配爲:

  1. "--""+"
  2. "-"跳過,因爲在它後面沒有另一個"-"
  3. "+-""-"
  4. "--""+"