2017-05-04 15 views
0

Vb.Netの分割機能でちょっと混乱します。vb.netの分割機能

If hdnDetails.Value.Split("|").Length = 0 Then 
     lblMsg.Text="Error" 
End If 

この文は、常にhdnDetails.Value=""でもtrueです。分割関数は常に長さ1を返します。 0の長さを得るための解決策は何ですか?

+0

解決方法は空の文字列です!編集:ごめんなさい、空の文字列も1を返します。返される配列が0になるコンステレーションがあるかどうかはわかりません。 – muffi

+1

解決策はありません。入力テキストが分割されていないことを意味する長さ1をチェックする必要があります。 –

+0

このコードは[tag:vb.net]です。[tag:c#]などの不要なタグは使用しないでください。 – TheLethalCoder

答えて

3

String.SplitLength = 0(このオーバーロードを含む)の配列を返しません。 MSDN:この場合はセパレータの文字のいずれかが含まれていない場合

、 返される配列は、この インスタンスを含む単一の要素から構成されています。

ですから、文字列に文字が含まれているかどうかを確認したい場合は、String.Containsを使用する必要があります。

If Not hdnDetails.Value.Contains("|") Then 
    lblMsg.Text="Error" 
Else 
    Dim array = hdnDetails.Value.Split("|") 
    ' Do something with this array if you need it 
End If 

をあなたが知りたい場合は、配列の長さが1であるかどうかをチェックすることも間違っていることに注意すべきです文字列にセパレータが含まれているかどうかを示します。配列の長さは、String.Splitのオーバーロードを使用すると0になります。オーバーロードには、StringSplitOptions引数が必要です。

はそれが"|"だとあなたがStringSplitOptions.RemoveEmptyEntriesを渡し、その後、結果の配列は0の長さを持つことになりますので、文字列が唯一の区切りが含まれて考えてみましょう。

StringSplitOptions.Noneを渡すと、長さが2:の2つの空文字列が得られます。

関連する問題