4

我需要替换一个字符串:

"abc.T.T.AT.T"

到一个全单的字符串T被替换为TOTlike

"abc.TOT.TOT.AT.TOT"

strings.replaceAll不为此工作。

4

3 回答 3

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
于 2013-04-29T11:15:29.243 回答
3

您可以为此任务使用单词边界:

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

这将替换“T”,仅当它前面没有并且后面没有另一个单词字符(意味着前面或前面没有其他字母或数字)时。

这将适用于您的示例。但是您应该知道,这将匹配所有带有非单词字符的“T”。替换将是,例如:

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

但不是“T”:

  • 。这个。
  • 。在。
  • .1T2。
  • .T3
于 2013-04-29T11:36:13.117 回答
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());

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

于 2013-04-29T11:12:20.133 回答