返回子字符串的内容与返回子字符串本身

时间:2016-05-03 03:33:47

标签: java string performance substring

我想知道是否这样;

public String seeColor(String str)
{
    int l = str.length();
    if(l >= 3 && str.substring(0, 3).equals("red")) return "red";
    if(l >= 4 && str.substring(0, 4).equals("blue")) return "blue";
    else return "";
}

然后编译得更快;

public String seeColor(String str)
{
    int l = str.length();
    if(l >= 3 && str.substring(0, 4).equals("red")) return str.substring(0, 4);
    if(l >= 4 && str.substring(0, 5).equals("blue")) return str.substring(0, 5);
    else return "";
}

或者两种方式都很糟糕,而另一种更有效的方法是我不知道的?

2 个答案:

答案 0 :(得分:3)

您可以使用以下代码获得更好的效果:

public String seeColor(String str)
{
    if(str.startsWith("red")) return "red";
    else if(str.startsWith("blue")) return "blue";
    else return "";
}

答案 1 :(得分:1)

每次调用substring都可以生成子字符串,因此第一选择更有效。但是,您当前的代码并非null安全(因此我会测试null),我希望String.startsWith(String)喜欢

public String seeColor(String str)
{
    if(str == null) return "";
    else if(str.startsWith("red")) return "red";
    else if(str.startsWith("blue")) return "blue";
    else return "";
}