2014-01-31 34 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 
相关问题