微科社区,轻松开发从此开始! 请登陆 免费注册

微科社区

当前位置:首页 > Java平台 > Eclipse >

利用StringBuffer设计一个Java程序,其功能是: 下面

时间:2014-04-10 09:36  浏览:努力统计中...
(1)从键盘上输入一段英文,并输出这段英文。 (2)输入英文中存在的一个单词和一个新单词,用新单词替换英文中原单词后,输出英文 importjava.util.*; importjava.lang.*; publicclassEnglish

 
(1)从键盘上输入一段英文,并输出这段英文。
(2)输入英文中存在的一个单词和一个新单词,用新单词替换英文中原单词后,输出英文

import  java.util.*;
 import java.lang.*;
public class EnglishWord {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
 StringBuffer words = new StringBuffer();
 System.out.println("请输入一行英文:");
 words.append(in.nextLine());
 System.out.println(words);
 System.out.println("输入的英文中存在的一个词:");
 String oldWord = in.next();
 System.out.println("请输入一个新词:");
 String newWord = in.next();
 while(true){
 int start = words.indexOf(oldWord);
 if(start < 0){
 break;
 }
 int end = words.lastIndexOf(oldWord)  ;
 words.replace(start, end, newWord);
 }
 System.out.println("修改后的英文为:");
 System.out.println(words);

}

}
最大的问题是程序不能停止,也不报错!

 while(true)是无限循环的意思,当不会报错,停不下来。

 while(true){
 int start = words.indexOf(oldWord);
 if(start < 0){
 break;
 }
 int end = words.lastIndexOf(oldWord)  ;
 words=words.replace(start, end, newWord);
}


int end = words.lastIndexOf(oldWord)  ;
这句话错了,你不是求oldWord在words的最后位置,而应该是oldWord的最后一个字符在words中的位置
应该是end = start + oldWord.length();

import java.util.*;

public class EnglishWord {

public static void main(String[] args) {
Scanner in = new Scanner(System.in);
StringBuffer words = new StringBuffer();
System.out.println("请输入一行英文:");
words.append(in.nextLine());
System.out.println(words);
System.out.println("输入的英文中存在的一个词:");
String oldWord = in.next();
System.out.println("请输入一个新词:");
String newWord = in.next();
while (true) {
int start = words.indexOf(oldWord);
if(start<0){
break;
}
int end = start + oldWord.length();
words.replace(start, end, newWord);
}
System.out.println("修改后的英文为:");
System.out.println(words);

}

}

end的取值有点问题

 while(true){
 int start = words.indexOf(oldWord);
 if(start < 0){
 break;
 }
在循环里words没有变化,start会一直不等于0的。
建议使用String或者用Stringbuffer.toString方法转换成string类型的再做,如下:
Scanner in = new Scanner(System.in);
String words = new String();
System.out.println("请输入一行英文:");
words = (in.nextLine());
System.out.println(words);
System.out.println("输入的英文中存在的一个词:");
String oldWord = in.next();
System.out.println("请输入一个新词:");
String newWord = in.next();
words = words.replaceAll(oldWord, newWord);
System.out.println("修改后的英文为:");
System.out.println(words);
in.close();

 while(true){
 int start = words.indexOf(oldWord);
 System.out.println("words:"+words); 
 System.out.println("start:"+start); 
 if(start < 0){
 break;
 }
 int end = words.lastIndexOf(oldWord)  ;
 words.replace(start, end, newWord);
 }
 System.out.println("修改后的英文为:");
 System.out.println(words);

}
添加这两行 
System.out.println("words:"+words); 
System.out.println("start:"+start); 
问题出在
String newWord = in.next(); 
和 words.replace(start, end, newWord);
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线------