删除两个字符之间的子字符串

时间:2014-01-31 10:45:12

标签: java regex

如何删除两个字符(+@)之间的子字符串。 实施例 -

bunny+12kl@funny.com应该bunny@funny.com

我应该使用哪个正则表达式。

8 个答案:

答案 0 :(得分:4)

String s = "bunny+12kl@funny.com";
String email = s.replaceAll("\\+.*@", "@");

答案 1 :(得分:2)

试试这个。

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

class Test {

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

}

答案 2 :(得分:1)

使用正则表达式是:

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

虽然你可以完全避免正则表达式并使用String#indexOf方法找到2个位置并使用它来获得子串。

答案 3 :(得分:1)

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

答案 4 :(得分:1)

无需使用正则表达式。你只需使用for循环即可:

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);
}

这更详细,但可能会更好地解释其他人以后维护代码的意思。不是每个人都很舒服解码正则表达式。

答案 5 :(得分:0)

以下是使用RegEx分组的解决方案。

String str = "bunny+12kl@funny.com";
final Pattern pattern = Pattern.compile("(.+?)\\+.*@(.+?)$");
final Matcher matcher = pattern.matcher(str);
matcher.find();
System.out.println(matcher.group(1) +matcher.group(2));

干杯

答案 6 :(得分:0)

只需编写一个实用程序类来切割字符串:

public class MyStringUtils {
    public static void main (String[] args) {
        String str = "bunny+12kl@funny.com";
        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: bunny@funny.com
Inner: +12kl

答案 7 :(得分:-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);
}