2012-06-29 2 views
0

В Java, пытающемся найти регулярное выражение, которое будет соответствовать всем экземплярам определенного символа (:) кроме первого экземпляра, нужно заменить все экземпляры, кроме первого.В Java как заменить все экземпляры символа, кроме первого?

Я могу это сделать,

Pattern p = Pattern.compile(":"); 
Matcher m = p.matcher(input); 
String output = m.replaceAll(""); 

и есть также m.replaceFirst(), но я хочу, чтобы заменить все, кроме первого.

+1

Это был волосок между голосованием, чтобы закрыть как «слишком локализованы» или «не настоящий вопрос». Поскольку вы не задавали вопрос, было сложно судить, было ли это «реальным». –

+0

Подсказка: indexOf, подстрока – auser

+0

Хорошо, Ive добавил, что я сделал, я знаю, это похоже на простой вопрос, но я не могу видеть ответ. –

ответ

1

Для регулярных выражений заменить шаблон использовать спички \G((?!^).*?|[^:]*:.*?): и в качестве замены используют первую группу $1

Посмотреть и проверить код регулярных выражений в Perl here.

+0

Похож на самый аккуратный ответ –

4

Наивный подход:

String[] parts = str.split(":", 2); 
str = parts[0] + ":" + parts[1].replaceAll(":", ""); 
+0

Это работает, спасибо. –

0

Вы можете использовать р ех

String str1 = "A:B:C:D:E:F:G:H:I:J:K:L:M"; 
str1= str1.replaceAll("([:|_].*?):", "$1_"); 
str1= str1.replaceAll("([:|_].*?):", "$1_"); 

Здесь я не могу изменить регулярное выражение, чтобы иметь выход в первую заменить себя. На самом деле сначала replaceAll замените ':' на '_' в альтернативных положениях.

+0

извините, я не понимаю ваш комментарий после регулярного выражения. –

+0

В приведенном выше коде все ':' заменены на '_', кроме первого, что вы искали. Для этого вам нужно дважды вызвать функцию replaceAll. Это дает ответ на ваш вопрос. Я просто пытался сказать, что искал лучшее регулярное выражение, которое будет выполнять эту задачу в первой replaceAll сам –

0
public static void main(String[] args) { 
    String name ="1_2_3_4_5"; 
    int index = name.indexOf("_"); 
    String name1 = name.substring(index+1); 
    name1 = name1.replace("_", "#"); 

    System.out.println(name.substring(0,index+1)+ name1); 
} 
+0

String name = "1_2_3_4_5"; int index = name.indexOf ("_"); System.out.println (name.substring (0, index) + name.substring (index + 1) .replace ("_", "#"); –

0
if (matcher.find()) { 
    String start = originalString.substring(0, matcher.end()); 
    matcher.reset(originalString.substring(matcher.end(), originalString.length())); 
    replacedString = start + matcher.replaceAll(""); 
} 
+4

Этот ответ был помечен кем-то по длине/содержимому. Предположительно, потому что это только код. –

Смежные вопросы