【发布时间】:2013-04-29 10:58:00
【问题描述】:
我需要替换一个字符串:
"abc.T.T.AT.T"
将所有单个T 替换为TOT 之类的字符串
"abc.TOT.TOT.AT.TOT"
strings.replaceAll 不适合这个。
【问题讨论】:
-
单T是什么意思?单个 T 被认为是 2 个点之间的 T,还是旁边没有其他 T 的 T?
我需要替换一个字符串:
"abc.T.T.AT.T"
将所有单个T 替换为TOT 之类的字符串
"abc.TOT.TOT.AT.TOT"
strings.replaceAll 不适合这个。
【问题讨论】:
环顾四周将解决您的问题:
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
【讨论】:
.(space)T(space)(space).?
single T 的定义。至少我的代码应该适用于他的例子。
(?<![^.])T(?![^.])
(?<![^.])T(?![^.])否定的否定...:D
<)。
您可以使用word boundaries 执行此任务:
text.replaceAll("\\bT\\b", "TOT");
这将替换一个“T”,前提是它的前面和后面都没有另一个单词字符(意味着前面或前面没有其他字母或数字)。
这将适用于您的示例。但是您应该知道,这将匹配所有带有非单词字符的“T”。替换将是,例如:
但不是“T”在:
【讨论】:
T 中的%T% 将被替换。我并不是说这是错误的,只是为了 OP 的信息。
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());
希望这是你需要的......
【讨论】:
abt.T.T.。我对只适用于某些输入的解决方案有点过敏。 (没有反对票,但我差点投反对票。)