2013-07-16 18 views
5

与えられた奇数の長さの文字列の中間3文字を取得します。 例if奇数の長さの文字列の中間3文字を取得する

私は以下のコードを試してみましたが、要件ごとに動作しましたが、同じことをするためのより良い方法があるのでしょうか?

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

1つの文字列が例外をスローすると、2つの文字列が不正な結果を返し、4つの文字列が間違った結果になります。 – asawyer

+0

@asawyerはい私は、例外処理とnull値のチェックのために私のプロジェクトに応じてコードを編集します。ありがとう。 – RahulD

+0

「奇妙な文字列」とは何ですか?長さが奇数のもの?あなたのコードは、そのような文字列でのみ呼び出されると思いますか? –

答えて

12

の代わりに、あなたは必要なメソッド内のコードのみとなり三項演算子

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

を使用することができます。エラーを防ぐために&& original.Length >= 3を追加しました。

+2

ヌルチェックを使用できました。 – asawyer

+2

可読性はひどいです。これは、三項演算子がコードを本当に理解して維持するのを難しくするために悪用される方法の素晴らしい例です。 – CesarGon

+0

ええ、私は同意しません。答えは、唯一の条件として中間表現として開始され、要件のために成長しました。 – Jonesopolis

9

これは私が思いついたものです。

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

私は、文字列の長さをチェックして例外が発生しないようにしています。

+0

これはヌルチェックを使用することもできます。 – asawyer

5

いつもLINQに行くことができました!

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

このコードは、文字列の長さが奇数であるかどうかをチェックしますか? – RahulD

+0

@rahuldwivedi奇数長文文字列のチェックが追加されました。 –

+0

長さを4より大きくする必要があるのはなぜですか?あなたは長さ3の文字列から真ん中の3文字を取ることができませんか?また、これにより、すべての空白文字列が削除されますが、これはOPの要件の1つではありません。おそらく 'string.IsNullOrEmpty'を使うつもりでしたか? –

関連する問題