2017-07-28 18 views
2

これらの複数のIf文を書くより良い方法があるのでしょうか?私はそこにいると確信しています、私はちょうどそれが何であるかを理解できません。本質的にコードは文字列を単に短縮しています。複数のif文が文字列と短縮の長さを確認する

   If text = "-----------------" Then 
        text = "-" 
       End If 
       If text = "----------------" Then 
        text = "-" 
       End If 
       If text = "---------------" Then 
        text = "-" 
       End If 
       If text = "--------------" Then 
        text = "-" 
       End If 
       If text = "-------------" Then 
        text = "-" 
       End If 
       If text = "------------" Then 
        text = "-" 
       End If 
       If text = "-----------" Then 
        text = "-" 
       End If 
       If text = "----------" Then 
        text = "-" 
       End If 
       If text = "---------" Then 
        text = "-" 
       End If 
       If text = "--------" Then 
        text = "-" 
       End If 
       If text = "-------" Then 
        text = "-" 
       End If 
       If text = "------" Then 
        text = "-" 
       End If 
       If text = "-----" Then 
        text = "-" 
       End If 
       If text = "----" Then 
        text = "-" 
       End If 
       If text = "---" Then 
        text = "-" 
       End If 
       If text = "--" Then 
        text = "-" 
       End If 

ご協力いただきまして誠にありがとうございます。

+0

を削除し、その後、制限を必要としない場合。私が思い出す限り、1文字の任意の繰り返し数を特定することは非常に簡単です。パフォーマンスが懸念される場合は、プロファイリングをお勧めします。あなたが投稿したコードが醜いので、それはおそらくいずれの選択肢よりも速いでしょう。 – Craig

答えて

5

あなたは、LINQを使用することができます。

If text.Length > 0 AndAlso text.All(Function(c) c = "-"c) Then text = "-" 

要求された説明は、(私はこの実際にはかなり理解できるが見つかっ):

を文字列を使用して、文字のコレクションのようにそれを使用することができますIEnumerable(Of Char)実装しているので。 LINQ拡張メソッドEnumerable.Allは、シーケンス/コレクション内のすべてのアイテムが指定されたpredicateTrueを返す)と一致するかどうかを判断します。この場合、述部は、指定されたcharが"-"cであるかどうかをチェックします(末尾のcはoption strict onで、これは文字ではなくcharであることをコンパイラーに伝えます)。したがって、文字列内のすべての文字が負である場合のみ、このメソッドはTrueを返します。 Allが異なる文字を見つけるとすぐに、Falseが返されます。

Trueを返した場合、1-nのマイナスがあり、それ以外の文字はないので、変数text"-"になります。

+0

コードスニペットは問題ありませんが、コードスニペットが何をしているのかについての説明がない限り、答えはあまり価値がありません。 –

+0

@AlessandroMandelli:fixed –

+0

良いです。今それが助けになります。 –

0

Dim maxLengthOfStringYouCompareTo As Integer = 17 

Dim xxx As String = "" 

Dim text As String = If((xxx.All(Function(charrr) charrr.ToString() = "-") OrElse xxx.Length <= maxLengthOfStringYouCompareTo), "-", "otherValue") 

?:についての何が、あなたは正規表現を使用することができ

xxx.Length <= maxLengthOfStringYouCompareTo 
0
While text.Contains("--") 
    text = text.Replace("--","-") 
End While 
+1

それはそれを行うためのクールな方法です! –

+0

私はこのコメントを前にdownvotedされている:私は、コードスニペットが大丈夫ですが、コードスニペットが何をしているの説明でいくつかの試みなしで本当に多くの価値がないので、あなたがダウン投票されていると信じています。 - Mike_OBrien Jun 13 at 16:11 そしてMikeのコメントは4回upvotedされています。 同じ理論的根拠をもって、上記の2つの答えもまた下降表示されます。 –

+0

コードスニペットが何をしているのかははっきりしています...そうではありませんか?ちょっとぺだんだ。 –

関連する問題