Hy,当我比较两个字符串时,我有一个问题
public void run(){
System.out.println(properties.readConfig("port.cfg"));
String lport = "";
String lasd = "";
File fport = null;
File fasd = null;
try {
BufferedWriter writer = new BufferedWriter( new FileWriter("port.cfg"));//this (if file doent exist) will create it
BufferedWriter witer = new BufferedWriter( new FileWriter("asd.cfg"));//this (if file doent exist) will create it
writer.close();
witer.close();
BufferedReader reader = new BufferedReader( new FileReader("port.cfg"));
BufferedReader rader = new BufferedReader( new FileReader("asd.cfg"));
lport = reader.readLine();
lasd = rader.readLine();
reader.close();
rader.close();
fasd = new File("asd.cfg");
fport = new File("port.cfg");
commands.print(String.valueOf(StringUtils.equals(lasd, lport)));
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
temp = InetAddress.getLocalHost().toString().split("/");
settings.myIp = temp[1];
} catch (UnknownHostException e) {
e.printStackTrace();
}
if(StringUtils.equals(lasd, lport)){//here is the problem
properties.saveConfig("port.cfg", "8795");
settings.port = properties.readConfig("port.cfg");
commands.print("Current port is: " + settings.port);
}else{
settings.port = properties.readConfig("port.cfg");
}
}
当我第一次运行程序时,问题部分抛出true并写入文件port.cfg
一个端口,用户可以更改此端口(这很好),但是当我第二次运行程序时它将再次抛出true
并重写端口(这很糟糕,因为文件port.cfg (String lport)
中的文本与文件asd.cfg (String lasd)
中的文本不同。commands
和{{ 1}}是我的班级。settings
班级来自StrungUtils
编辑:
我尝试过:apache.common.lang
答案 0 :(得分:2)
StringUtils.equals(null, null) = true
对于null
个值,StringUtils
将返回true
。您应该在null
equals
之前添加StringUtils
检查
if(lasd != null && lport != null && StringUtils.equals(lasd, lport)) {
//...
}
答案 1 :(得分:2)
我们不知道如何实施StringUtils.equals()
。例如,throws
一个RuntimeException
:
public class Demo {
public static void main(String[] args) {
String a = null;
String b = null;
System.out.println(StringUtils.equals(a, b));
}
}
class StringUtils {
public static final boolean equals(String a, String b) {
return a.equals(b);
}
}
另一方面,returns true
public static final boolean equals(String a, String b) {
if(a == null && b == null) {
return true;
}
else if(a == null || b == null) {
return false;
}
else {
return a.equals(b);
}
}
在不了解StringUtils.equals()
的实施情况的情况下,我们无法帮助您。您可以使用两种不同的方式编写自己的equals()
方法,或者学习您在程序中包含的API并相应地使用它们。