字符串到int转换

时间:2012-01-18 05:03:20

标签: java arrays string int

长话短说,下面的片段是关于将发短信的月份转换为编号的月份(例如,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;
}    

7 个答案:

答案 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。