在string.replaceAll方面需要帮助

时间:2013-04-29 10:58:01

标签: java regex string

我需要替换一个字符串:

"abc.T.T.AT.T"

到一个字符串,其中所有单T将被TOT替换为

"abc.TOT.TOT.AT.TOT"

strings.replaceAll没有为此工作。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

您可以使用word boundaries执行此任务:

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

只有当前面没有“T”时才会替换“T”,而后面或前面没有其他字母或数字。

这适用于您的示例。但是你应该知道,这将匹配所有“T”与非单词字符。取而代之的是,例如:

  • .T。
  • %T%
  • ,T,
  • 笔 - !

但不是“T”:

  • 。这
  • .AT。
  • .1T2。
  • .T3

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

希望这是你所需要的......