字符串替换的简单问题 不就是将"美国"替换成"中国"吗?replaceAll() 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 当然不行了,前面后面要限制条件的比如"他是美国人"就不能替换为"他是中国人",因为"美国"的前面没有"abc",后面没有"def"(*号的字符串长度在0-100之间) 写一个简单的算法就行,不能够光光只用系统提供的方法===============先找到字符串里是否有abc如果没有,结束。如果有,查找后面若干字符后面是不是有“美国def” 如果没有,结束 如果有,替换为“中国def”详细的,就不写了,大概就是这个意思 import java.util.regex.Pattern;import java.util.regex.Matcher;public class Replace02 { public static void main(String[] args) { StringBuffer original = new StringBuffer("abc12美国34美国56美国7890美国def"); String keyWord = "美国"; String replacement = "中国"; StringBuffer result = new StringBuffer(); Pattern p1 = Pattern.compile("(abc.*)" + keyWord + "(def)"); Matcher m1 = p1.matcher(original); while (m1.find()) { m1.appendReplacement(result, "$1" + replacement + "$2"); } m1.appendTail(result); System.out.println("original: \"" + original + "\""); System.out.println("result: \"" + result + "\""); }}如此即可 import java.util.regex.Pattern;import java.util.regex.Matcher;如上所说,这两个类可以解决.历害,我没有想到 "registered(已注册)"的办法确实可行不过还有一个小问题,那就是只能替换original中的最后一个"美国"输出结果为"abc12美国34美国56美国7890中国def"或StringBuffer original = new StringBuffer("abc12美国34美国56美国7890美国def");original.append("abc88888美国322美国233美国ohoh美国def");时输出结果为:"abc12美国34美国56美国7890美国defabc88888美国322美国233美国ohoh中国def"而我要的结果是:"abc12中国34中国56中国7890中国defabc88888中国322中国233中国ohoh中国def"要怎么修改呢 开始本以为你只想要替换最后一个如果要全替换的话要用到双Patternimport java.util.regex.Pattern;import java.util.regex.Matcher;public class Replace02 { public static void main(String[] args) { StringBuffer original = new StringBuffer("987654321abc12美国34美国def56美国7890美国def123456"); original.append("abc88888美国322美国233美国ohoh美国def"); String blank = ""; String keyWord = "美国"; String replacement = "中国"; StringBuffer result = new StringBuffer(); Pattern p1 = Pattern.compile("abc.*?" + keyWord + "def"); Matcher m1 = p1.matcher(original); Pattern p2 = Pattern.compile(keyWord); Matcher m2 = p2.matcher(blank); while (m1.find()) { m1.appendReplacement(result, blank); m2.reset(m1.group()); while (m2.find()) { m2.appendReplacement(result, replacement); } m2.appendTail(result); } m1.appendTail(result); System.out.println("original: \"" + original + "\""); System.out.println("result: \"" + result + "\""); }}运行结果为:original: "987654321abc12美国34美国def56美国7890美国def123456abc88888美国322美国233美国ohoh美国def"result: "987654321abc12中国34中国def56美国7890美国def123456abc88888中国322中国233中国ohoh中国def"注意: original 里面头一个匹配是 "abc12美国34美国def",而紧随其后的 "56美国7890美国def" 由于没有前缀 "abc" 所以被忽略掉了如果你想得到结果 "987654321abc12中国34中国def56中国7890中国def123456abc88888中国322中国233中国ohoh中国def"只需要将 Pattern p1 = Pattern.compile("abc.*?" + keyWord + "def");里面的 "?" 删除就可以了 美丽的Regular Expression :-) 谢谢 registered(已注册)的帮助 数字排序问题 最近遇到的一些问题,希望高手指点 高分\在线等:sql sverver2005里的image字段,select出来后怎样insert到oracle里? instanceof MS经常听到,什么意思? 看不懂API文档的说明.. 请求各位强人解答。十万火急。 没有连上sqlServer2000,请高手帮助 JTree 的分层模糊查找 日历控件问题紧急求助!!!!! 请问PB,JB在哪有下载 请教一条Sql语句!! 在线等候!! 菜鸟提问:类继承的问题 ===关于 作者名 和 文档 的问题 !!??====
比如"他是美国人"就不能替换为"他是中国人",因为"美国"的前面没有"abc",后面没有"def"
(*号的字符串长度在0-100之间)
===============
先找到字符串里是否有abc
如果没有,结束。
如果有,查找后面若干字符后面是不是有“美国def”
如果没有,结束
如果有,替换为“中国def”详细的,就不写了,大概就是这个意思
import java.util.regex.Matcher;public class Replace02 {
public static void main(String[] args) {
StringBuffer original = new StringBuffer("abc12美国34美国56美国7890美国def"); String keyWord = "美国";
String replacement = "中国";
StringBuffer result = new StringBuffer(); Pattern p1 = Pattern.compile("(abc.*)" + keyWord + "(def)");
Matcher m1 = p1.matcher(original); while (m1.find()) {
m1.appendReplacement(result, "$1" + replacement + "$2");
}
m1.appendTail(result); System.out.println("original: \"" + original + "\"");
System.out.println("result: \"" + result + "\"");
}
}如此即可
import java.util.regex.Matcher;
如上所说,这两个类可以解决.历害,我没有想到
不过还有一个小问题,那就是只能替换original中的最后一个"美国"
输出结果为"abc12美国34美国56美国7890中国def"或
StringBuffer original = new StringBuffer("abc12美国34美国56美国7890美国def");
original.append("abc88888美国322美国233美国ohoh美国def");
时
输出结果为:"abc12美国34美国56美国7890美国defabc88888美国322美国233美国ohoh中国def"
而我要的结果是:"abc12中国34中国56中国7890中国defabc88888中国322中国233中国ohoh中国def"
要怎么修改呢
如果要全替换的话要用到双Patternimport java.util.regex.Pattern;
import java.util.regex.Matcher;public class Replace02 {
public static void main(String[] args) {
StringBuffer original =
new StringBuffer("987654321abc12美国34美国def56美国7890美国def123456");
original.append("abc88888美国322美国233美国ohoh美国def"); String blank = "";
String keyWord = "美国";
String replacement = "中国";
StringBuffer result = new StringBuffer(); Pattern p1 = Pattern.compile("abc.*?" + keyWord + "def");
Matcher m1 = p1.matcher(original);
Pattern p2 = Pattern.compile(keyWord);
Matcher m2 = p2.matcher(blank); while (m1.find()) {
m1.appendReplacement(result, blank);
m2.reset(m1.group());
while (m2.find()) {
m2.appendReplacement(result, replacement);
}
m2.appendTail(result);
}
m1.appendTail(result); System.out.println("original: \"" + original + "\"");
System.out.println("result: \"" + result + "\"");
}
}运行结果为:
original: "987654321abc12美国34美国def56美国7890美国def123456abc88888美国322美国233美国ohoh美国def"
result: "987654321abc12中国34中国def56美国7890美国def123456abc88888中国322中国233中国ohoh中国def"注意: original 里面头一个匹配是 "abc12美国34美国def",
而紧随其后的 "56美国7890美国def" 由于没有前缀 "abc" 所以被忽略掉了
如果你想得到结果 "987654321abc12中国34中国def56中国7890中国def123456abc88888中国322中国233中国ohoh中国def"
只需要将 Pattern p1 = Pattern.compile("abc.*?" + keyWord + "def");
里面的 "?" 删除就可以了
Regular Expression
:-)