长话短说,下面的片段是关于将发短信的月份转换为编号的月份(例如,1月 - > 1)。没有错误,但最后我继续得到0作为m的结果。问题出在哪里?
//date1s[] is the result of splitting date1 by spaces (date1 = 1 Jan 2012)
m = convertMonth(date1s[1]); //date1s[1] contains the Month; date1s[0] the date and date1s[2] the year
public int convertMonth(String monw) {
int x = 0;
if (monw == "Jan") {
x = 1;
}
else if (monw == "Feb") {
x = 2;
}
else if (monw == "Mar") {
x = 3;
}
else if (monw == "Apr") {
x = 4;
}
else if (monw == "May") {
x = 5;
}
else if (monw == "Jun") {
x = 6;
}
else if (monw == "Jul") {
x = 7;
}
else if (monw == "Aug") {
x = 8;
}
else if (monw == "Sep") {
x = 9;
}
else if (monw == "Oct") {
x = 10;
}
else if (monw == "Nov") {
x = 11;
}
else if (monw == "Dec") {
x = 12;
}
return x;
}
答案 0 :(得分:4)
而不是做
if (monw == "Jan") {
x = 1;
}
使用,
if (monw.equals("Jan")) {
x = 1;
}
答案 1 :(得分:4)
使用String的.equals()
方法。
if (monw.equals("Jan"))
使用==
运算符时,它会比较两个对象的内存位置并返回false
。换句话说,如果同一个对象位于等式的两边,它只返回true
。因此,您应该使用.equals()
方法,如果两个不同的对象具有相同的值,则返回true
。
修改强>
我刚检查过,@ LayCubicleMonkey是对的。 ==
运算符检查内存中的位置是否相同。我创建了一个类,覆盖了hashCode()
方法,创建了两个对象并打印了obj1==obj2
。它会打印false
。
答案 2 :(得分:3)
您正在使用==
而不是equals()
进行字符串比较。
答案 3 :(得分:3)
你的字符串比较问题很好地解释了,所以我不会重写它。除此之外...
在您的情况下,如果您的月份名称是,则更好使用Map<String,Integer>
个月的名称和值或{{1}有月份名字。它将省略您的长Enum
条件。
枚举示例:
if...else..if...else
地图示例:
public enum Month {
Jan,
Feb,
Mar,
Apr,
// ...
Dec
}
public int toMonthInt(String input) {
return Month.valueOf(input).ordinal() + 1; // +1 because you want Month value to start with 1.
}
答案 4 :(得分:2)
在Java7中,您可以使用switch
语句,而不是if-else
。它也支持String。
答案 5 :(得分:1)
if ("Jan".equals (monw))
{
x = 1;
}
答案 6 :(得分:0)
另一种精益方法是将名称存储在列表中:
List <String> as = Arrays.asList ("Jan", "Feb", "Mar");
System.out.println (as.indexOf ("Feb"));
System.out.println (as.indexOf ("Fex"));
第一个返回1,第二个返回-1。对于您,您将为基于0的索引添加+1,并检查它最后不是0或开头是-1。
我不确定这是否适用于Blackberry。