2016-05-03 128 views
0

我想知道这是否;返回一个子字符串的内容与返回子字符串本身

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 ""; 
} 

或者可能这两种方式吸吮,还有另一种更有效的方法,我不知道?

+0

为什么你关心在编译时间上的差异,我宁愿?它将基本上没有什么不同。注意这两个例子并不相同:第二种情况相当于简单的返回“;”(删除两个条件;忽略空安全),因为两个条件都不能匹配。 –

+0

我在CodingBat上做了一个练习,字符串'str'将被其他值取代......我想知道哪种方法是最快的,因为我试图在解决问题时总是采用最具性能的方法。 **编辑:** 在真实世界的应用程序中使用哪种方法真的没有区别? – CaffeinatedSynapse

+0

编译时间或执行时间? – benbenw

回答

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 ""; 
} 
3

你可以使用下面的代码以提高性能:

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