(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);
上面,如果你输入的字母都是符合要求的,这就是个死循环了。