Back to Top

プログラムの覚書

Category: 文字列

VB.NET 高速に文字列を処理する

VB.NETで文字列を連結したりする処理は、代入文等でオブジェクトが作成されるので処理時間がかかる、そこでStringBuilderクラスを使用して高速で文字列を処理することが出来ます。

通常の文字列処理とStringBuilderクラスを使用した速度を比較する

'通常の文字列の追加
Dim t1 As Integer = System.Environment.TickCount
Dim str1 As String = ""
For i As Integer = 0 To 300000
    str1 += "A"
Next
t1 = System.Environment.TickCount - t1
MessageBox.Show(t1.ToString() & "ミリ秒")
		
		
'StringBuilderでの文字列の追加
Dim t2 As Integer = System.Environment.TickCount
Dim sb As New System.Text.StringBuilder()
sb.Capacity = 3000000    'ある程度、使用するサイズが決まっている場合は指定しておくと若干速い
For i As Integer = 0 To 3000000
    sb.Append("A")
Next
Dim str2 As String = sb.ToString()
t2 = System.Environment.TickCount - t2
MessageBox.Show(t2.ToString() & "ミリ秒")

StringBuilderは追加以外に文字列の挿入Insert(, “”)・’文字列の置換・Replace(“”, “”)・’文字の削除Remove(,)の機能もあります。

 

VB.NET 特定文か文字列を判断する

VB.NETにて、特定の文字列(整数・実数・英字・日付・電話番号・郵便番号など)かをチェックする方法を記載します。

TextBox等で文字を入力する際、文字列が特定の文かチェックすることがよくあります。方法は沢山ありますが、正規表現を使用してチェックする方法を以下に記載します。

正規表現による特定文字列かの判断する

'半角数字か判断する
Dim rHalfNumeric As New System.Text.RegularExpressions.Regex("^[0-9]+$")

'半角整数値か判断する
Dim rHalfDigit As New System.Text.RegularExpressions.Regex("^[+\-]?[0-9]+$")

'半角実数値か判断する
Dim rHalfReal As New System.Text.RegularExpressions.Regex("^[+-]?[0-9]*[\.]?[0-9]+$")

'半角16進数か判断する
Dim rHalfHex As New System.Text.RegularExpressions.Regex("^[a-fA-F0-9]+$")

'半角英字か判断する
Dim rHalfAlpha As New System.Text.RegularExpressions.Regex("^[a-zA-Z]+$")

'半角英数字か判断する
Dim rHalfAlphaNum As New System.Text.RegularExpressions.Regex("^[a-zA-Z0-9]+$")

'半角日付文字か判断する
Dim rHalfDate As New System.Text.RegularExpressions.Regex("\A([0-9]{2,4})/([0-9]{2})/([0-9]{2})\z")

'半角カナ文字か判断する
Dim rHalfKana As New System.Text.RegularExpressions.Regex("^[ア-ン]+$")

'半角電話番号か判断する
Dim rHalfPhone As New System.Text.RegularExpressions.Regex("\A\d{1,4}-\d{1,4}-\d{1,4}\z")

'半角郵便番号か判断する
Dim rHalfPost As New System.Text.RegularExpressions.Regex("\A\d{1,3}-\d{1,4}\z")

'全角カナか判断する
Dim rDblKatakana As New System.Text.RegularExpressions.Regex("^[ァ-ヴ!ー]+$")

'全角かなか判断する
Dim rDblHiragana As New System.Text.RegularExpressions.Regex("^[ぁ-ん!ー]+$")


'使い方例
If Not rHalfPost.IsMatch("333-44444") Then
    MsgBox("以外の文字が含まれています。")
End If

 

文字列の全部の文字が、全角・半角か判断関数

文字列には、半角、全角が混ざって設定されています。文字列内の全文字が、半角または全角か判断する方法です。

'文字列内の文字が、全て半角文字か判断する
Public Shared Function IsSglString(ByVal str As String) As Boolean
    Dim num As Integer = System.Text.Encoding.GetEncoding("Shift_JIS").GetByteCount(str)
    Return num = str.Length
End Function
'文字列内の文字が、全て全角文字か判断する
Public Shared Function IsDblString(ByVal str As String) As Boolean
    Dim num As Integer = System.Text.Encoding.GetEncoding("Shift_JIS").GetByteCount(str)
    Return num = str.Length * 2
End Function

 

TryParse メソッドを使用して判断する

数値文字列、日付文字列は、TryParseメソッドを使用したほうが簡単に判断ができると思われます。

Dim bc As Boolean
Dim str As String = "2345"

'整数文字列か判断する
bc = Integer.TryParse(str, Nothing)
'または
bc = Integer.TryParse(str, System.Globalization.NumberStyles.Number,_
	                   System.Globalization.CultureInfo.InvariantCulture, Nothing)
Dim bc As Boolean
Dim str As String = "2345.6"

'実数文字列か判断する
bc = Double.TryParse(str, Nothing)
'または
bc = Double.TryParse(str, System.Globalization.NumberStyles.Any,_
                          System.Globalization.CultureInfo.InvariantCulture, Nothing)
Dim bc As Boolean
Dim str As String = "20/5/6"

'日付文字列か判断する
bc = DateTime.TryParse(str, Nothing)
'または
Dim cinfo As New System.Globalization.CultureInfo("ja-JP")
bc  = DateTime.TryParse(str, cinfo, System.Globalization.DateTimeStyles.AssumeLocal, Nothing)

・パラメータは、NumberStyles列挙体・DateTimeStyles列挙体・CultureInfoクラスを参照してください

・ほかにParse関数や日付(DateTime)にはParseExact関数などもあります

・TryParse等は2パラメータは、Windowsの地域設定コントロールパネルの設定に影響を受けるようですので、実践では使用しないほうがよいかも