Java字符串格式什么都不返回

时间:2013-07-03 11:09:22

标签: java formatting string-formatting

我试图从类中获取返回的值,但是我认为string.format()导致错误导致没有值返回。

类别:

public class FilterTime {
    public String getData(String day, Integer time){
        // define the result
        String result = "";
        String convertedDay = "";

        if(day == "Friday 30th August"){
            convertedDay = "30";
        }
        if(day == "Saturday 31st August"){
            convertedDay = "31";
        }
        if(day == "Sunday 1st September"){
            convertedDay = "01";
        }

        if(time == null){
            result = "http://www.website.org/json.php?f=%s&type=date".format(convertedDay);
            Log.d("RESULT", "r:" + result);
        }else{
            result = "http://www.website.org/json.php?f=%s&time=@d&type=dateAndTime".format(convertedDay, time);
            Log.d("RESULT", "r:" + result);
        }

        return result;
    }
}

当我在我的活动中跟踪结果时:

FilterTime filterTime = new FilterTime();
String filteredURL = filterTime.getData(dayFilter, timeFilter);

当我跟踪filteredURL时,它根本不返回任何内容。所以我然后将Log.d()放入类中,我发现在跟踪以下内容时它也不会返回任何内容:

if(time == null){
                result = "http://www.website.org/json.php?f=%s&type=date".format(convertedDay);
                Log.d("RESULT", "r:" + result);
            }else{
                result = "http://www.website.org/json.php?f=%s&time=@d&type=dateAndTime".format(convertedDay, time);
                Log.d("RESULT", "r:" + result);
            }

我无法理解错误的来源,因为没有错误,只是警告说它应该以静态方式访问,但我认为错误存在于if语句中。

3 个答案:

答案 0 :(得分:3)

使用equals()比较String

的内容
  

将此字符串与指定对象进行比较。当且仅当参数不为null并且是一个表示与此对象相同的字符序列的String对象时,结果才为真。

因此将您的代码更改为:

if("Friday 30th August".equals(day)){
        convertedDay = "30";
}

==运算符比较对象引用,该变量包含对象的引用。它检查引用是否指向同一个对象。

P.S。: - 在字符串文字上调用equals()以避免因 null day而导致的任何NPE。

答案 1 :(得分:0)

您的String比较不正确,而不是==使用equals

由于format比较无效,

convertedDay一直打印,因为""仍为空String

答案 2 :(得分:0)

String.format()是一种静态方法。不要在String对象上调用它,只需直接调用它:

String.format("http://www.website.org/json.php?f=%s&type=date", convertedDay);

那应该像你想要的那样进行格式化