2014-01-31 98 views

回答

1

使用正則表達式是:

String repl = str.replaceAll("(.*?)[+].*?(@.*)", "$1$2"); 

雖然你可以完全避免的正則表達式,並使用String#indexOf方法來找出2個位置,讓使用該子。

+1

試用這個「$ 1 @ $ 2」進行更換。 –

+0

固定它。其實我打算把'@'放在括號內,但錯誤輸入。 – anubhava

2

試試這個。

str = str.replaceAll("\\+[^@]*@", "@");

class Test { 

    public static void main(String[] args) { 
     String str = "bunny+12kddddd+++ddd/d/d/d/d\\####[email protected]"; 
     str = str.replaceAll("\\+[^@]*@", "@"); 
     System.out.println(str);   
    } 

} 
1
s = s.replace(s.substring(s.indexOf("+"), s.indexOf("@")), ""); 
1

沒有必要使用正則表達式。你可以這樣做只是使用一個循環:

for(;;) { 
    int start = str.indexOf('+'); 
    if(start == -1) break; 
    int stop = str.indexOf('@'); 
    if(stop == -1) break; 
    str = str.substring(0,start+1) + str.substring(stop); 
} 

這是更冗長,但可以更好地解釋給別人以後維護代碼什麼是你的意思做。並非每個人都很喜歡解碼正則表達式。

+0

我同意你的觀點,正則表達式可能需要比預期更多的處理時間。這是一個更優雅的解決方案。如果您願意,可以將其更改爲單行。 str = str.substring(0,str.indexOf('+')+ 1)+ str.substring(str.indexOf('@')+1,str.length); –

+0

@ScriptShiva是的,非常優雅,雖然我試圖拼出來,以證明目標更清楚。如果你想全部替換它們,無論如何你都需要在循環中進行某種退出檢查。 – Will

+0

我的意思是這並不比一個小的正則表達式更好。也許你反其道而行之。 –

0

這是一個使用RegExp分組的解決方案。

String str = "[email protected]"; 
final Pattern pattern = Pattern.compile("(.+?)\\+.*@(.+?)$"); 
final Matcher matcher = pattern.matcher(str); 
matcher.find(); 
System.out.println(matcher.group(1) +matcher.group(2)); 

乾杯

-1
public static string RemoveSpecialCharacters(string input) { 
    Regex r = new Regex("(?:[^a-z0-9 ]|(?<=['\"])s)", RegexOptions.IgnoreCase | RegexOptions.CultureInvariant | RegexOptions.Compiled); 
    return r.Replace(input, String.Empty); 
} 
+0

using System.Text.RegularExpressions; –

+0

這個問題是關於Java而不是C#。 –

0

只寫一個實用工具類切片字符串:

public class MyStringUtils { 
    public static void main (String[] args) { 
     String str = "[email protected]"; 
     int startIndex = str.indexOf('+'); 
     int endIndex = str.indexOf('@'); 

     System.out.println("Outer: " + sliceRangeOuter(str, startIndex, endIndex)); 
     System.out.println("Inner: " + sliceRangeInner(str, startIndex, endIndex)); 
    } 

    public static String sliceStart(String str, int startIndex) { 
     if (startIndex < 0) 
      startIndex = str.length() + startIndex; 
     return str.substring(startIndex); 
    } 

    public static String sliceEnd(String str, int endIndex) { 
     if (endIndex < 0) 
      endIndex = str.length() + endIndex; 
     return str.substring(0, endIndex); 
    } 

    public static String sliceRangeInner(String str, int startIndex, int endIndex) { 
     if (startIndex < 0) 
      startIndex = str.length() + startIndex; 
     if (endIndex < 0) 
      endIndex = str.length() + endIndex; 
     return str.substring(startIndex, endIndex); 
    } 

    public static String sliceRangeOuter(String str, int startIndex, int endIndex) { 
     if (startIndex < 0) 
      startIndex = str.length() + startIndex; 
     if (endIndex < 0) 
      endIndex = str.length() + endIndex; 
     return sliceEnd(str, startIndex) + sliceStart(str, endIndex); 
    } 
} 

輸出:

Outer: [email protected] 
Inner: +12kl 
相關問題