2013-07-16 16 views
5

Ich möchte die mittleren drei Zeichen einer gegebenen Zeichenfolge mit ungerader Länge abrufen. Eg. wennErhalten von mittleren drei Zeichen einer Zeichenfolge mit ungerader Länge

string original = "India" // expected output - "ndi" 
string original = "America" // expected output - "eri" 

Ich versuchte den folgenden Code und es funktioniert wie pro Anforderung, aber ich fragte mich, gibt es einen besseren Weg für das gleiche?

public string GetMiddleString (string original) 
{ 
    string trimmed = string.Empty; 
    int midCharIndex = (original.Length/2); 
    if ((original.Length) % 2 != 0) 
    { 
     trimmed = original.Substring (midCharIndex - 1, 3); 
    } 
    else 
    { 
     trimmed = original; 
    } 
    return trimmed; 
} 
+2

Bei Übergabe von 'null' und einer einzigen Zeichenfolge werden Ausnahmen ausgelöst. Eine Zeichenfolge mit zwei Zeichen gibt ein falsches Ergebnis zurück, und eine Zeichenfolge mit vier Zeichen hat das falsche Ergebnis. – asawyer

+0

@asawyer Ja Ich werde den Code in meinem Projekt mit Ausnahmebehandlung und zum Überprüfen von Nullwerten entsprechend bearbeiten. Vielen Dank. – RahulD

+0

Was ist eine "ungerade Zeichenfolge"? Eins mit einer Länge, die eine ungerade Zahl ist? Was lässt Sie glauben, dass Ihr Code nur mit solchen Zeichenfolgen aufgerufen wird? –

Antwort

12

statt der, wenn Sie einen ternären Operator

return (!String.IsNullOrEmpty(original) 
     && original.Length % 2 != 0 
     && original.Length >= 3) 
    ? original.Substring((original.Length/2) - 1, 3) 
    : original; 

, die der einzige Code innerhalb der Methode wäre erforderlich nutzen könnten. Hinzugefügt wurde die && original.Length >= 3 um einen Fehler zu verhindern.

+2

Könnte einen Null-Check verwenden. – asawyer

+2

Lesbarkeit ist schrecklich. Dies ist ein großartiges Beispiel dafür, wie der ternäre Operator dazu missbraucht werden kann, Code wirklich schwer zu verstehen und zu pflegen. – CesarGon

+0

Ja, ich stimme nicht zu. Die Antwort begann als nur der mittlere Ausdruck als einzige Bedingung und wuchs für Anforderungen. – Jonesopolis

9

Hier ist, was ich gefunden habe. Nicht, dass es ändert sich viel, um Ihren Code wirklich

public string GetMiddleString(string original) 
{ 
    if (original.Length % 2 != 0 && original.Length >= 3) 
     return original.Substring(original.Length/2 - 1, 3); 
    return original; 
} 

Ich würde sicherstellen, dass die Länge der Zeichenfolge zu überprüfen, so dass Sie keine Ausnahmen erhalten.

+0

Dies könnte auch einen Null-Check verwenden. – asawyer

5

Konnte immer LINQ gehen!

if(!string.IsNullOrWhiteSpace(s) && s.Length > 4 && (s.Length % 2) != 0) { 
    return new string(s.Skip((s.Length/2) - 1).Take(3).ToArray()); 
} 
else { return string.Empty; } 
+0

Prüft dieser Code die Länge der Zeichenfolge ist ungerade oder nicht? – RahulD

+0

@rahuldwivedi Die Überprüfung für ungerade Länge Zeichenfolge hinzugefügt. –

+0

Warum sollte die Länge größer als vier sein? Können Sie nicht die mittleren drei Zeichen aus einer Zeichenfolge der Länge drei nehmen? Außerdem werden dadurch Zeichenfolgen eliminiert, die alle Leerzeichen sind, was nicht eine der Anforderungen des OP ist. Wolltest du vielleicht 'string.IsNullOrEmpty' benutzen? –

Verwandte Themen