import java.io.*;public class Change 
{
public String readline()
{
try{
FileReader file = new FileReader("change.txt");
StringBuffer buf = new StringBuffer();
char inChar;
int in=0;
do{
in = file.read();
inChar = (char)in;
if(in != -1)
buf.append(inChar);
}while((inChar != '\n') && (in != -1));
file.close();
return buf.toString();
}catch(FileNotFoundException fnfe){
System.out.println("FileNotFoundException: "+fnfe.getMessage());
return null;
}catch(IOException ioe){
System.out.println("Exception: "+ioe.getMessage());
return null;
}
}
public void anly(String str){
String word = "";
char inChar;
int i=0;
StringBuffer buf = new StringBuffer();
while(i<str.length()){
inChar = str.charAt(i);
if((inChar != ' ') && (inChar != '\n'))
buf.append(inChar);
else
{
word = buf.toString();
buf = new StringBuffer();
}
if(word == "hate")
{
word ="love";
System.out.print(word+"");
}else
{
System.out.print(word+"");
word = "";
}
i++;
}
}
public static void main(String[] args) 
{
Change chan = new Change();
String line;
line=chan.readline();
System.out.println(line);
chan.anly(line);
}
}
chang.txt文件中是I hate you.
这程序是想把hate用love替代掉,然后输出句子不过不知道为什么没作用

解决方案 »

  1.   

    public void anly(String str){ 
    String word = ""; 
    char inChar; 
    int i=0; 
    StringBuffer buf = new StringBuffer(); 
    while(i <str.length()){ 
    inChar = str.charAt(i); 
    if((inChar != ' ') && (inChar != '\n')) 
    buf.append(inChar); 
    else 

    word = buf.toString(); 
    buf = new StringBuffer(); 

    if(word == "hate") 

    word ="love"; 
    System.out.print(word+""); 
    }else 

    System.out.print(word+""); 
    word = ""; 

    i++; 


    红色部分,两个字符串比较,要用equals。改为if(word.equals("hate"))
      

  2.   

    楼上正解。
    我来补充原因:== 比较的是两个变量或者对象的地址值是否相等,equals()比较的则是他们的内容值是否相等。
      

  3.   

    哈,怎么这么多人犯这样的错误哦?
    LS说的都对,当你要比较两字符串是否一样的时候,就应该首先选用equals()
    而==比较的是两引用(也就是你定义的变量)是否指向同一对象
      

  4.   

    谢谢,这样改了,可以了
    不过我原来也怀疑这里错了,所以写了下面这个程序试了下,好像“==”也可以的啊class Compar 
    {
    public static void main(String[] args) 
    {
    String str1 = "hate";
    if(str1 == "hate")
    str1 = "love";
    else
    str1 = "haha";
    System.out.println(str1);
    }
    }
    输出是love
      

  5.   

    通过方法返回的String都是对象,比较用equals(),直接初始化的String保存的是常量~常量之间的比较就可以用==
      

  6.   

    如果初始化的String对象是常量,可以用==
    这是因为==比较的时引用的地址,但是这个其实比不是比较String内容
    比较String变量是否相等因该用String.equals()
      

  7.   

    你在4楼的代码和上面的是不相同的,4楼的str1指向字符串常量对象"hate",而字符串常量只要有相等值的存在,就不会产生新的常量对象,因此本身就是同一个对象,所以可以==。
    而你的问题里面红色部分word并不是由字符串常量赋值得到的,和"hate"不是同一个对象,只是值相等,只能用equals。
      

  8.   

    两个字符串比较,要用equals。改为if(word.equals("hate"))
    word == "hate",你这样比较的是两个String对象