String.format对String没有影响

时间:2014-01-14 14:19:12

标签: java android string

在以下代码timeToDisplay.format似乎对timeToDisplay String没有影响。 tw.setText(timeToDisplay)显示毫秒而不是预期的MM:SS。我毫不高兴地重建了这个项目。

代码:

 TextView tw = (TextView) getView().findViewById(R.id.textView_time);

            long millis = intent.getLongExtra("stamp", 0L);

            String timeToDisplay = String.valueOf(millis);
            timeToDisplay.format("%d min, %d sec",
                    TimeUnit.MILLISECONDS.toMinutes(millis),
                    TimeUnit.MILLISECONDS.toSeconds(millis) -
                            TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));

            tw.setText(timeToDisplay);

5 个答案:

答案 0 :(得分:3)

Java字符串是不可变的。您必须将结果分配回变量:

timeToDisplay = String.format(...);

在您的情况下,您根本不需要将millis变成字符串;格式化程序只需要你为它计算的数字。

答案 1 :(得分:0)

调用timeToDisplay.format()不会更改您的实际timeToDisplay引用。但是,它将返回新字符串。将其添加到您的代码中:

String formattedTime = timeToDisplay.format("%d min, %d sec",
                TimeUnit.MILLISECONDS.toMinutes(millis),
                TimeUnit.MILLISECONDS.toSeconds(millis) -
                        TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));

然后,在formattedTime

中使用setText

答案 2 :(得分:0)

字符串不可变。试试:

timeToDisplay = timeToDisplay.format("%d min, %d sec",
    TimeUnit.MILLISECONDS.toMinutes(millis),
    TimeUnit.MILLISECONDS.toSeconds(millis) -
    TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));

答案 3 :(得分:0)

tw.setText(timeToDisplay.format("%d min, %d sec",
                    TimeUnit.MILLISECONDS.toMinutes(millis),
                    TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis))));

或者,您可以将timeToDisplay.format("%d min, %d sec", TimeUnit.MILLISECONDS.toMinutes(millis), TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis))));的值赋给变量并将其传递给tw.setText()。

答案 4 :(得分:-1)

字符串是不可变的,你必须以这种方式重新分配:

timeToDisplay = timeToDisplay.format("%d min, %d sec",
                TimeUnit.MILLISECONDS.toMinutes(millis),
                TimeUnit.MILLISECONDS.toSeconds(millis) -
                        TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));

这意味着格式化方法无法更改timeToDisplay它只返回一个格式化的新字符串。