2014-01-31 6 views

ответ

1

Использование регулярных выражений является:

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

Хотя вы можете полностью избежать регулярных выражений и использовать String#indexOf методы, чтобы найти 2 позиции и получить подстроки с использованием этого.

+1

Попробуйте это «$ 1 @ $ 2» для замены. –

+0

Fxed it. На самом деле я намеревался сохранить '@' в скобках, но не понял. – 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

Там нет необходимости использовать регулярные выражения. Вы можете сделать это только с помощью для цикла:

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

с использованием 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 
Смежные вопросы