帮忙找找问题

快乐的盒子 2008-04-12 08:58:13
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替代掉,然后输出句子

不过不知道为什么没作用
...全文
98 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
快乐的盒子 2008-04-12
  • 打赏
  • 举报
回复
谢谢各位了,汗。。。今天折磨我这么久
hmsuccess 2008-04-12
  • 打赏
  • 举报
回复
两个字符串比较,要用equals。改为if(word.equals("hate"))
word == "hate",你这样比较的是两个String对象
panxuan 2008-04-12
  • 打赏
  • 举报
回复
都说的很对。
kingssq 2008-04-12
  • 打赏
  • 举报
回复
你在4楼的代码和上面的是不相同的,4楼的str1指向字符串常量对象"hate",而字符串常量只要有相等值的存在,就不会产生新的常量对象,因此本身就是同一个对象,所以可以==。
而你的问题里面红色部分word并不是由字符串常量赋值得到的,和"hate"不是同一个对象,只是值相等,只能用equals。
EricXXX 2008-04-12
  • 打赏
  • 举报
回复
如果初始化的String对象是常量,可以用==
这是因为==比较的时引用的地址,但是这个其实比不是比较String内容
比较String变量是否相等因该用String.equals()
a15664153 2008-04-12
  • 打赏
  • 举报
回复
通过方法返回的String都是对象,比较用equals(),

直接初始化的String保存的是常量~常量之间的比较就可以用==
快乐的盒子 2008-04-12
  • 打赏
  • 举报
回复
谢谢,这样改了,可以了
不过我原来也怀疑这里错了,所以写了下面这个程序试了下,好像“==”也可以的啊

class Compar
{
public static void main(String[] args)
{
String str1 = "hate";
if(str1 == "hate")
str1 = "love";
else
str1 = "haha";
System.out.println(str1);
}
}
输出是love
lingirl 2008-04-12
  • 打赏
  • 举报
回复
哈,怎么这么多人犯这样的错误哦?
LS说的都对,当你要比较两字符串是否一样的时候,就应该首先选用equals()
而==比较的是两引用(也就是你定义的变量)是否指向同一对象
PQjava 2008-04-12
  • 打赏
  • 举报
回复
楼上正解。
我来补充原因:== 比较的是两个变量或者对象的地址值是否相等,equals()比较的则是他们的内容值是否相等。
kingssq 2008-04-12
  • 打赏
  • 举报
回复
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"))

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧