1.编写一个进行简单字符串替换的例子,例如给出这样一句话“用鼠标点击这个文本框,会弹出一个文本框,点击确定按钮,关闭文本框。”,要求编写子程序把字符串中所有“点击”二字替换成“单击”,并输出替换后的结果。
/** ReplaceString.java @author ZDS
* 2007-2-18 下午15:09:24 */
package chap05;
/** 把字符串中的某个词替换为另一个词*/
public class ReplaceString {
public static void main(String[] args) {
String text="用鼠标点击该文本框,会弹出一个文本框,点击确定按钮,关闭文本框。";
System.out.println(replace("点击", "单击", text));
}
// 在字符串inString中查找字符串oldStr,然后替换为newStr
public static String replace(String oldStr, String newStr, String inString){
int nLen = inString.length();
int repLen = oldStr.length();
StringBuffer buffer = new StringBuffer(); // 替换后的字符串缓冲区
int p = 0; // 用于保存当前替换的位置
while (p < nLen){
int start = inString.indexOf(oldStr, p);
if (start == -1) {
buffer.append(inString.substring(p));
break; // 未找到要替换的目标,跳出循环
}
buffer.append(inString.substring(p, start));
buffer.append(newStr);
p = start + repLen;// 移动到下一个替换位置
}
return buffer.toString();
}
}
2.使用正则表达式,把字符串中的某些“-”号替换为“.”,如字符串为“程序1运行的结果如图2-3所示;程序2-1运行的结果如图2所示;程序3运行的结果如表3-5所示;程序4的代码为System.out.println(x-y),运行结果如图5-6所示”。要求只替换“如图2-3所示”、“如表3-5所示”和“如图5-6所示”这种文字模式中的“-”号,而不能替换“程序2-1”和“System.out.println(x-y)”这种文字中的“-”号。
此外“如图5-6所示”这样的文字中在“-”前面和后面允许有空格,但替换后不能有空格,比如应该替换为“如图5-6所示”,而不应该是“如图5-6所示”。
整个字符串替换后的结果为“程序1运行的结果如图2-3所示;程序2-1运行的结果如图2所示;程序3运行的结果如表3-5所示;程序4的代码为System.out.println(x-y),运行结果如图5-6所示”。
程序代码如下:
/** RegexMatcher.java @author ZDS
* 2007-2-18 下午15:09:24 */
packagechap05;
importjava.util.regex.Matcher;
importjava.util.regex.Pattern;
/** 替换字符串中的如图n-m、如表n-m为如图n.m、如表n.m */
publicclass RegexMatcher {
public static void main(String[] args) {
String text = "程序1运行的结果如图2-3所示;程序2-1运行的结果如图2" +
"所示;程序3运行的结果如表3 - 5所示;程序4的代码为" +
"System.out.println(x-y),+运行结果如图15- 6所示";
System.out.println(replace(text));
}
// 在字符串inString中查找字符串oldStr,然后替换为newStr
public static String replace(String inString) {
Pattern p = Pattern.compile("(如[表图]\\d+)\\s*\\-\\s*(\\d+所示)");
StringBuffer buffer = new StringBuffer(); // 替换后的字符串缓冲区
int n = 0; // 用于保存当前替换的位置
Matcher m = p.matcher(inString);
while (m.find()) {
int start = m.start();
buffer.append(inString.substring(n, start));
buffer.append(m.group(1));
buffer.append('.');
buffer.append(m.group(2));
n = m.end();
}
// 添加字符串的末尾
buffer.append(inString.substring(n));
return buffer.toString();
}
}