2016-05-03 4 views
0

Ich fragte mich, ob dies;Zurückgeben des Inhalts einer Teilzeichenkette gegen das Zurückgeben der Teilzeichenkette selbst

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

war schneller zu kompilieren dann das;

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

oder vielleicht beide Wege saugen und es gibt einen anderen, effizienteren Ansatz, den ich nicht kenne?

+0

Warum Du den Unterschied in der Kompilierung egal? Es wird im Grunde nicht anders sein. Beachten Sie, dass die beiden Beispiele jedoch nicht gleichwertig sind: Der zweite Fall ist gleichbedeutend mit "return" ";" (beide Bedingungen entfernen; Ignorieren der Null-Sicherheit), da keine Bedingung erfüllt werden kann. –

+0

Ich habe eine Übung auf CodingBat gemacht, die Zeichenfolge "str" ​​wird durch andere Werte ersetzt ... Ich wollte wissen, welche Methode am schnellsten war, weil ich versuche, immer den leistungsfähigsten Ansatz für die Lösung eines Problems zu wählen . ** EDIT: ** Macht es wirklich keinen Unterschied, welche Methode ich in realen Anwendungen verwende? – CaffeinatedSynapse

+0

Kompilierzeit ODER Ausführungszeit? – benbenw

Antwort

1

Jeder Aufruf von substring funktionierts die erzeugen die Teil zu bekommen, also die erste Wahl effizienter ist. Jedoch Ihr aktueller Code ist nicht null sicher (so würde ich für null testen) und ich würde es vorziehen, String.startsWith(String) wie

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

Sie könnten unter Code für eine bessere Leistung verwenden:

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