2013-04-29 2 views
4

Мне нужно заменить строку:Нужна помощь в string.replaceAll

"abc.T.T.AT.T" 

в строку со всеми одним T быть заменен TOT как

"abc.TOT.TOT.AT.TOT" 

strings.replaceAll не работает для этого.

+0

что вы имеете в виду singe T's? Является ли один T рассмотренным T между 2 точками или T, у которого нет другого T рядом с ним? –

+0

Попробуйте это http://stackoverflow.com/questions/1277157/java-regex-replace-with-capturing-group –

ответ

1
String input = "abc.T.T.AT.T"; 
     StringTokenizer st = new StringTokenizer(input,"."); 
     StringBuffer sb = new StringBuffer(); 
     while(st.hasMoreTokens()){ 
      String token = st.nextToken(); 
      if(token.equals("T")){ 
       token= token.replace("T", "TOT"); 
      } 
      sb.append(token+"."); 
     } 
      if(!(input.lastIndexOf(".")==input.length()-1)) 
      sb.deleteCharAt(sb.lastIndexOf(".")); 
     System.out.println(sb.toString()); 

Надежда это то, что вам требуется ....

+3

Это добавит дополнительный период до конца. – jlordo

+0

В конце концов просто сделайте ..sb.deleteCharAt (sb.lastIndexOf (".")); –

+0

Это не сработает для 'abt.T.T.'. Я отношусь к аллергии на решения, которые работают только на некоторые входы. (Нет нисходящего, но я был близок к тому, чтобы дать один.) –

8

осмотреться решит вашу проблему:

s.replaceAll("(?<=\\.|^)T(?=\\.|$)", "TOT"); 

, если вы:

String s = "T.T.T.AT.T.fT.T.T"; 
System.out.println(s.replaceAll("(?<=\\.|^)T(?=\\.|$)", "TOT")); 

выход будет:

TOT.TOT.TOT.AT.TOT.fT.TOT.TOT 
+0

только из любопытства, что происходит, когда строка имеет что-то вроде этого: - '. (Space) T (пробел) (пробел) .'? – SudoRahul

+3

, то инструкция replace не будет работать. Он основан только на примере OP. «точка» разделена. что он не упомянул определение «единственного Т». по крайней мере, мои коды должны работать для его примера. – Kent

+0

Эквивалентное, но супер запутанное регулярное выражение '(? nhahtdh

3

Вы можете использовать word boundaries для выполнения этой задачи:

text.replaceAll("\\bT\\b", "TOT"); 

Это заменит «Т», только если он не предшествует и не следуют другим словом характер (не означает, что никакой другой буквы или цифры до или вперед).

Это будет работать для вашего примера. Но вы должны знать, что это будет соответствовать всем «Т» с символами без слова. Заменено будет, например:

  • .T.
  • % T%
  • , T,
  • T-

но не "Т" в:

  • .Это.
  • .AT.
  • .1T2.
  • .T3
+2

Нет букв или цифр ** или подчеркивания **. Поэтому 'T' в'% T% 'будет заменен. Я не говорю, что это неправильно, просто для информации ОП. – nhahtdh

+0

@nhahtdh, спасибо за ваше разъяснение. Я добавил несколько примеров к моему ответу. – stema