当前位置: 代码迷 >> Eclipse >> 利用StringBuffer设计一个Java程序,其效能是: 下面程序那不对呢
  详细解决方案

利用StringBuffer设计一个Java程序,其效能是: 下面程序那不对呢

热度:96   发布时间:2016-04-23 00:47:10.0
利用StringBuffer设计一个Java程序,其功能是: 下面程序那不对呢?

 
(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)是无限循环的意思,当不会报错,停不下来。
------解决方案--------------------
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);
上面,如果你输入的字母都是符合要求的,这就是个死循环了。
  相关解决方案