Saturday, December 24, 2016

Bab 10. Visual Basic .NET Belajar Dari Contoh



10. String dan Karakter







Pengantar

Pada bab ini, akan dikenalkan kapabilitas pemrosesan karakter dan string Visual Basic dan didemonstrasikan kegunaan ekspresi reguler dalam mencari pola di dalam teks. Teknik-teknik yang disajikan pada bab ini dapat dipakai untuk mengembangkan editor teks, pengolah kata, dan perangkat-lunak pemrosesan teks lainnya. Pada bab ini, akan diberikan penjelasan detil tentang kapabilitas kelas String dan tipe Char dari namespace System, dan kelas StringBuilder dari namespace System.Text, dan kelas Regex dan Match dari  namespace System.Text.Reguler-Expressions.


Dasar Karakter dan String
Karakter merupakan blok pembangun dasar dari kode sumber Visual Basic. Setiap program terdiri-dari karakter-karakter yang, ketika dikelompokkan bersama, menciptakan sebuah runtun karakter yang bisa diinterpretasikan oleh kompiler sebagai instruksi dalam menyelesaikan sebuah pekerjaan. Di samping karakter normal, program juga dapat memuat konstanta karakter. Konstanta karakter adalah sebuah karakter yang direpresentasikan sebagai sebuah nilai integer, yang dinamakan dengan kode karakter. Sebagai contoh, nilai integer 112 berkaitan dengan konstanta karakter “z”c. Himpunan karakter Unicode merepresentasikan semua himpunan karakter internasional, termasuk di dalamnya himpunan karakter ASCII.

String adalah sederet karakter yang diperlakukan sebagai satu unit. Karakter-karakter tersebut dapat berupa huruf besar, huruf kecil, dijit, dan berbagai karakter spesial, seperti +, -, *, /, $, dan lainnya. String adalah sebuah objek dari kelas String di dalam namespace System. Literal string atau konstanta string (sering juga dipanggil dengan objek String literal) adalah runtun karakter yang diapit oleh dua tanda kutip ganda, sebagai berikut:

"Djumanggal Sianipar"
"Jl. Medan KM 10.5 Pematang Siantar"
"Sumut, Indonesia"
"(0622) 555-1212"

Sebuah deklarasi dapat menugaskan suatu literal String kepada referensi String. Deklarasi

Dim warna As String = "biru"

menginisialisasi referensi String, warna, dengan objek literal String, “biru”.


Konstruktor String
Kelas String menyediakan tiga konstruktor untuk menginisialisasi objek String dalam berbagai cara. Kode 10.1 mendemonstrasikan kegunaan ketiga konstruktor tersebut.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
' Kode 10.1: KonstruktorString.vb
' Demonstrasi konstruktor kelas String.

Imports System.Windows.Forms

Module modKonstruktorString

    Sub Main()
        Dim arrayKarakter As Char()
        Dim keluaran As String
        Dim kutip As Char = ChrW(34)
        Dim stringAsli, string1, string2, string3, _
            string4 As String

        arrayKarakter = New Char() {"d"c, "a"c, "n"c, _
        "a"c, "u"c, " "c, "t"c, "o"c, "b"c, "a"c}

        ' inisialisasi string
        stringAsli = "Selamat Datang ke Danau Toba!"
        string1 = stringAsli
        string2 = New String(arrayKarakter)
        string3 = New String(arrayKarakter, 6, 3)
        string4 = New String("C"c, 5)

        keluaran = "string1 = " & kuota & string1 & kuota & _
        vbCrLf & "string2 = " & kuota & string2 & kuota & _
        vbCrLf & "string3 = " & kuota & string3 & kuota & _
        vbCrLf & "string4 = " & kuota & string4 & kuota

        MessageBox.Show(keluaran, "Konstruktor Kelas String", _
        MessageBoxButtons.OK, MessageBoxIcon.Information)
    End Sub ' Main

End Module ' modKonstruktorString



Gambar 10.1 Keluaran program pada kode 10.1


Pada baris 11, variabel kutip dideklarasikan dan ditugasi nilai yang merupakan nilai balik oleh fungsi ChrW ketika ChrW menerima nilai 34. Nilai yang dilewatkan kepada ChrW adalah kode karakter Unicode. Fungsi ChrW menghasilkan nilai balik berupa sebuah karakter bertipe Char. Pada kasus ini, fungsi ChrW menghasilkan sebuah karakter kutip ganda (“).

Baris 15-16 mengalokasikan array Char, arrayKarakter, yang memuat sepuluh karakter. Sufiks c yang ditempatkan di akhir setiap String akan mengkonversinya menjadi literal karakter. Hal ini dilakukan karena Option Strict melarang konversi implisit dari String menjadi tipe Char.

Baris 19 menugaskan string literal “Selamat Datang ke Danau Toba” kepada referensi String, stringAsli. Baris 20 menetapkan string1 untuk menunjuk ke literal String, stringAsli.

Baris 21 menugaskan sebuah objek String yang baru kepada string2, menggunakan konstruktor String yang mengambil sebuah array karakter sebagai argumen. Objek String yang baru memuat salinan karakter-karakter di dalam array arrayKarakter.

Baris 22 menugaskan sebuah objek String baru kepada string3, menggunakan konstruktor String yang mengambil sebuah array Char dan dua Integer sebagai argumen. Argumen kedua menspesifikasi posisi indeks awal (offset) dari karakter-karakter di dalam array yang akan disalin. Argumen ketiga menspesifikasi jumlah karakter yang akan disalin. Objek String yang baru memuat salinan dari sejumlah karakter di dalam array.

Baris 23 menugaskan sebuah objek String yang baru kepada string4, menggunakan konstruktor String yang mengambil sebuah karakter dan sebuah Integer sebagai argumen, yang menspesifikasi berapa kali karakter tersebut (argumen pertama) diulang di dalam String.


Properti Length dan Chars, dan Metode CopyTo
Aplikasi pada kode 10.2 menyajikan properti String, Chars, yang memfasilitasi pengambilan sembarang karakter di dalam String, dan properti String, Length, yang menghasilkan panjang String. Metode String, CopyTo, menyalin sejumlah karakter dari sebuah String ke dalam array Char.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
' Kode 10.2: PelbagaiString.vb
' Menggunakan properti Length dan Chars, dan metode CopyTo
' dari kelas string.

Imports System.Windows.Forms

Module modPelbagaiString

    Sub Main()
        Dim string1, keluaran As String
        Dim arrayKarakter As Char()
        Dim i As Integer
        Dim kutip As Char = ChrW(34)

        string1 = "danau toba"
        arrayKarakter = New Char(5) {}

        ' menampilkan string
        keluaran = "string1: " & kutip & string1 & kutip

        ' menguji properti Length
        keluaran &= vbCrLf & "Panjang dari string1: " & string1.Length

        ' loop menjelajahi karakter-karakter di dalam string1
        ' dan menampilkannya secara terbalik
        keluaran &= vbCrLf & "String yang dibalik adalah: "

        For i = string1.Length - 1 To 0 Step -1
            keluaran &= string1.Chars(i)
        Next

        ' menyalin karakter-karakter dari string1 ke dalam arrayKarakter
        string1.CopyTo(0, arrayKarakter, 0, 5)
        keluaran &= vbCrLf & "Array karakter adalah: "

        For i = 0 To arrayKarakter.GetUpperBound(0)
            keluaran &= arrayKarakter(i)
        Next

        MessageBox.Show(keluaran, "Demonstrasi Properti" & _
        " Length dan Chars", _
        MessageBoxButtons.OK, MessageBoxIcon.Information)
    End Sub ' Main

End Module ' modPelbagaiString



Gambar 10.2 Keluaran program pada kode 10.2

Pada contoh ini, diciptakan sebuah aplikasi yang menentukan panjang suatu String, membalikkan urutan karakter di dalam String, dan menyalin sederet karakter dari String ke dalam array karakter.

Baris 22 menggunakan properti String, Length, untuk menentukan jumlah karakter di dalam String string1. Seperti array, String selalu mengetahui ukurannya sendiri.

Baris 29-30 menampilkan semua karakter String string1 dalam urutan terbalik pada keluaran. Properti String, Chars, menghasilkan karakter yang berlokasi pada indeks tertentu di dalam String. Properti Chars mengambil sebuah argumen Integer yang menspesifikasi indekas dan menghasilkan karakter pada indeks tersebut. Seperti array, elemen pertama suatu String adalah indeks 0.

Baris 33 menggunakan metode CopyTo untuk menyalin sejumlah karakter dari sebuah String (string1) ke dalam array karakter (arrayKarakter). Argumen pertama yang diberikan kepada metode CopyTo adalah indeks awal penyalinan karakter di dalam String. Argumen kedua adalah array karakter, destinasi karakter-karakter yang akan disalin. Argumen ketiga adalah indeks yang menspesifikasi lokasi untuk menempatkan karakter-karakter yang disalin di dalam array karakter. Argumen terakhir adalah jumlah karakter yang akan disalin dari String.


Perbandingan String
Dua contoh berikutnya akan mendemonstrasikan berbagai metode yang disediakan Visual Basic untuk membandingkan objek-objek String. Untuk mengerti bagaimana satu String dapat “lebih dari” atau “kurang dari” String lainnya, perhatikan proses alfabetisasi nama. Pembaca akan, tanpa ragu, menempatkan “Djumanggal” sebelum “Jumanggal”, karena huruf pertama dari “Djumanggal” berada sebelum huruf pertama dari “Jumanggal” di dalam alfabet.

Komputer dapat mengurutkan karakter-karakter secara alfabetik karena tersusun secara internal sebagai kode numerik Unicode. Ketika membandingkan dua String, komputer hanya perlu membandingkan kode-kode numerik di dalam kedua String tersebut.

Kelas String menyediakan beberapa cara dalam membandingkan String. Aplikasi pada kode 10.3 mendemonstrasikan kegunaan metode Equals, metode CompareTo, dan operator ekualitas (=).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
' Kode 10.3: PerbandinganString.vb
' Membandingkan string.

Imports System.Windows.Forms

Module modBanding

    Sub Main()
        Dim string1 As String = "hallo"
        Dim string2 As String = "selamat jalan"
        Dim string3 As String = "Danau Toba"
        Dim string4 As String = "danau toba"
        Dim keluaran As String
        Dim kutip As Char = ChrW(34)

        ' menampilkan nilai-nilai dari empat String
        keluaran = "string1 = " & kutip & string1 & kutip & _
        vbCrLf & "string2 = " & kutip & string2 & kutip & _
        vbCrLf & "string3 = " & kutip & string3 & kutip & _
        vbCrLf & "string4 = " & kutip & string4 & kutip & _
        vbCrLf & vbCrLf

        ' menguji ekualitas menggunakan metode Equals
        If (string1.Equals("hallo")) Then
            keluaran &= "string1 sama dengan " & kutip & "hallo" & _
            kutip & vbCrLf

        Else
            keluaran &= "string1 tidak sama dengan " & kutip & _
            "hallo" & kutip & vbCrLf
        End If

        ' menguji ekualitas dengan =
        If string1 = "hallo" Then
            keluaran &= "string1 sama dengan " & kutip & "hallo" & _
            kutip & vbCrLf

        Else
            keluaran &= "string1 tidak sama dengan " & kutip & _
            "hallo" & kutip & vbCrLf
        End If

        ' menguji kasus perbandingan ekualitas 
        If (String.Equals(string3, string4)) Then
            keluaran &= "string3 sama dengan string4" & vbCrLf
        Else
            keluaran &= "string3 tidak sama dengan string4" & vbCrLf
        End If

        ' menguji CompareTo
        keluaran &= vbCrLf & "string1.CompareTo(string2) adalah " & _
        string1.CompareTo(string2) & vbCrLf & _
        "string2.CompareTo(string1) adalah " & _
        string2.CompareTo(string1) & vbCrLf & _
        "string1.CompareTo(string1) adalah " & _
        string1.CompareTo(string1) & vbCrLf & _
        "string3.CompareTo(string4) adalah " & _
        string3.CompareTo(string4) & vbCrLf & _
        "string4.CompareTo(string3) adalah " & _
        string4.CompareTo(string3) & vbCrLf & vbCrLf

        MessageBox.Show(keluaran, "Demonstrasi" & _
        " Perbandingan String", MessageBoxButtons.OK, _
        MessageBoxIcon.Information)
    End Sub ' Main

End Module ' modBanding



Gambar 10.3 Keluaran program pada kode 10.3


Kondisi struktur If (baris 24) menggunakan metode Equals untuk membandingkan string1 dan litera Stringhallo” untuk menentukan apakah keduanya sama. Metode Equals (diwarisi oleh String dari kelas Object) menguji ekualitas dua objek (yaitu, memeriksa apakah kedua objek memuat isi yang identik). Metode ini menghasilkan True jika kedua objek sama dan menghasilkan False jika sebaliknya. Pada contoh ini, kondisi bernilai True, karena string1 mereferensi objek literal Stringhallo”. Metode Equals menggunakan komparasi leksikografikal, dimana nilai-nilai Unicode Integer yang mewakili tiap karakter di dalam setiap String dibandingkan. Metode Equals membandingkan nilai-nilai Unicode Integer yang merepresentasikan karakter-karakter di dalam tiap String. Perbandingan atas Stringhallo” dengan string “HALLO” akan menghasilkan False, karena representasi Integer dari huruf kecil berbeda dari representasi Integer dari huruf besar.

Kondisi pada struktor If kedua (baris 34) menggunakan operator ekualitas (=) untuk membandingkan String string1 dengan literal Stringhallo”. Dalam Visual Basic, operator ekualitas juga menggunakan perbandingan leksikografikal dalam membandingkan dua String. Jadi, kondisi pada struktur If menghasilkan True, karena nilai-nilai dari string1 dan “hallo” sama.

Pengujian ekualitas String antara string3 dan string4 (baris 44) diberikan untuk mengilustrasikan bahwa perbandingan bersifat sensitif terhadap jenis huruf. Di sini, metode Shared, Equals, dipakai untuk membandingkan nilai-nilai dari dua String. “Danau Toba” tidak sama dengan “danau toba”, sehingga kondisi pada struktur If bernilai False, dan pesan “string3 tidak sama dengan string4” akan ditampilkan pada keluaran.

Baris 52-60 menggunakan metode CompareTo untuk membandingkan dua objek String. Metode ini menghasilkan 0 jika kedua String sama, -1 jika String pemanggil CompareTo kurang dari String yang dilewatkan sebagai argumen, dan 1 jika String pemanggil CompareTo lebih dari String yang dilewatkan sebagai argumen. Metode CompareTo juga menggunakan perbandingan leksikografikal.

Perhatikan bahwa CompareTo memandang string3 lebih dari string4. Satu-satunya perbedaan antara kedua string adalah bahwa string3 memuat dua huruf besar. Contoh ini mengilustrasikan bahwa huruf besar memiliki nilai lebih tinggi dalam himpunan karakter Unicode dibandingkan huruf kecil.

Aplikasi pada kode 10.4 menunjukkan bagaimana mengujia apakah sebuah instans String diawali atau diakhiri dengan suatu String yang diberikan. Metode StartsWith menentukan jika sebuah instans String diawali dengan teks String yang dilewatkan sebagai argumen. Metode EndsWith menentukan jika sebuah instans String diakhiri dengan teks String yang dilewatkan sebagai argumen. Metode Main pada aplikasi modAwalAkhir mendefinisikan sebuah array String (dinamakan strings), yang memuat “berawal”, “mengawali”, “berakhir”, “diakhiri”.

Baris 20 menggunakan metode StartsWith, yang mengambil sebuah argumen String. Kondisi pada struktur If menentukan apakah String pada indeks i diawali dengan string “ber”. Jika ya, metode menghasilkan True dan menampilkan strings(i) pada keluaran.

Baris 32 menggunakan metode EndsWith, yang juga mengambil sebuah argumen String. Kondisi pada struktur If menentukan apakah String pada indeks i diakhiri dengan string “ali”. Jika ya, metode menghasilkan True, dan strings(i) ditampilkan pada keluaran.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
' Kode 10.4: StringAwalAkhir.vb
' Demonstrasi metode StartsWith dan EndsWith.

Imports System.Windows.Forms

Module modAwalAkhir

    Sub Main()
        Dim strings As String()
        Dim keluaran As String = ""
        Dim i As Integer
        Dim kutip As Char = ChrW(34)

        strings = New String() {"berawal", "mengawali", _
        "berakhir", "mengakhiri"}

        ' menguji setiap string untuk melihat apakah diawali dengan "ber"
        For i = 0 To strings.GetUpperBound(0)

            If strings(i).StartsWith("ber") Then
                keluaran &= kutip & strings(i) & kutip & _
                " diawali dengan " & kutip & "ber" & kutip & vbCrLf
            End If

        Next

        keluaran &= vbCrLf

        ' menguji apakah setiap string diakhir dengan "ali"
        For i = 0 To strings.GetUpperBound(0)

            If strings(i).EndsWith("ali") Then
                keluaran &= kutip & strings(i) & kutip & _
                " diakhir dengan " & kutip & "ali" & kutip & vbCrLf
            End If

        Next

        MessageBox.Show(keluaran, "Demonstrasi Metode StartsWith " & _
        " dan EndsWith", MessageBoxButtons.OK, _
        MessageBoxIcon.Information)
    End Sub ' Main

End Module ' modAwalAkhir



Gambar 10.4 Keluaran program pada kode 10.4


Metode GetHashCode
Seringkali, dibutuhkan untuk menyimpan String dan tipe data lain dengan sebuah cara, dimana informasi dapat ditemukan dengan cepat. Salah satu cara terbaik dalam membuat informasi menjadi sangat mudah diakses adalah dengan menyimpannya pada tabel hash. Tabel hash menyimpan sebuah objek dengan terlebih dahulu melakukan kalkulasi spesifik pada objek tersebut, yang akan menghasilkan kode hash. Objek kemudian disimpan pada lokasi dalam tabel hash yang ditentukan oleh kode hash yang dihitung. Ketika program perlu menarik informasi tersebut, kalkulasi yang sama dilakukan, menghasilkan kode hash yang sama.


Sembarang objek dapat disimpan dalam tabel hash. Kelas Object mendefinisikan GetHashCode untuk melakukan perhitungan kode-hash. Meskipun semua kelas mewarisi metode ini dari kelas Object, Anda direkomendasikan untuk mendefinisikan-ulang implementasi defaultnya. Metode String Overrides GetHashCode dipakai untuk menyediakan distribusi kode-hash berdasarkan isi String.

Contoh pada kode 10.5 mendemonstrasikan aplikasi metode GetHashCode atas dua String (“hallo” dan “Hallo”). Di sini, nilai kode-hash untuk tiap String akan berbeda.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
' Kode 10.5: KodeHashString.vb
' Demonstrasi metode GetHashCode dari kelas String.

Imports System.Windows.Forms

Module modKodeHash

    Sub Main()
        Dim string1 As String = "hallo"
        Dim string2 As String = "Hallo"
        Dim keluaran As String
        Dim kutip As Char = ChrW(34)

        keluaran = "Kode hash untuk " & kutip & string1 & _
        kutip & " adalah " & string1.GetHashCode() & vbCrLf

        keluaran &= "Kode hash untuk " & kutip & string2 & _
         kutip & " adalah " & string2.GetHashCode()

        MessageBox.Show(keluaran, _
        "Demonstrasi metode String GetHashCode")
    End Sub ' Main

End Module ' modKodeHash



Gambar 10.5 Keluaran program pada kode 10.5


Mencari Lokasi Karakter dan Substring
Dalam banyak aplikasi, diperlukan untuk mencari sebuah karakter atau himpunan karakter di dalam suatu String. Sebagai contoh, programer yang menciptakan pengolah kata akan memerlukan kapabilitas pencarian dokumen. Aplikasi pada kode 10.6 mendemonstrasikan beberapa versi dari metode IndexOf, IndexOfAny, LastIndexOf, dan LastIndexOfAny, yang mencari karakter atau substring di dalam sebuah String. Semua pencarian pada contoh ini dilakukan pada String huruf (diinisialisasi dengan “abcdef-ghijklmabcdefghijklm”) di dalam Main.

Baris 14-21 menggunakan metode IndexOf untuk mencari lokasi kemunculan pertama atas sebuah karakter atau substring di dalam String. Jika IndexOf menemukan karakter yang dicari, IndexOf akan menghasilkan indeks dari karakter tersebut di dalam String; sebaliknya, IndexOf menghasilkan -1. Ekspresi pada baris 18 menggunakan sebuah versi dari metode IndexOf yang mengambil dua argumen, yaitu karakter yang akan dicari dan indeks awal pencarian. Metode ini tidak melakukan pencarian pada semua karakter yang berada sebelum indekas awal (pada kasus ini 1). Ekspresi pada baris 21 menggunakan versi lain dari metode IndexOf yang mengambil tiga argumen, yaitu karakter yang akan dicari, indeks awal pencarian, dan jumlah karakter yang akan dicari.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
' Kode 10.6: StringIndexMethods
' Menggunakan metode-metode pencarian String.

Imports System.Windows.Forms

Module modMetodeIndeks

    Sub Main()
        Dim huruf As String = "abcdefghijklmabcdefghijklm"
        Dim keluaran As String
        Dim hurufPencarian As Char() = New Char() {"c"c, "a"c, "$"c}

        ' menguji IndexOf untuk mencari lokasi sebuah karakter di dalam string
        keluaran &= """c"" berlokasi pada indeks " & _
        huruf.IndexOf("c"c)

        keluaran &= vbCrLf & """a"" berlokasi pada indeks " & _
        huruf.IndexOf("a"c, 1)

        keluaran &= vbCrLf & """$"" berlokasi pada indeks " & _
        huruf.IndexOf("$"c, 3, 5)

        ' menguji LastIndexOf untuk mencari sebuah karakter di dalam sebuah string
        keluaran &= vbCrLf & vbCrLf & "Kemunculan terkahir ""c"" berlokasi pada " & _
        "indeks " & huruf.LastIndexOf("c"c)

        keluaran &= vbCrLf & "Kemunculan terakhir ""a"" berlokasi pada indeks " & _
        huruf.LastIndexOf("a"c, 25)

        keluaran &= vbCrLf & "Kemunculan terakhir ""$"" berlokasi pada indeks " & _
        huruf.LastIndexOf("$"c, 15, 5)

        ' menguji IndexOf untuk mencari substring di dalam sebuah string
        keluaran &= vbCrLf & vbCrLf & """def"" berlokasi pada" & _
        " indeks " & huruf.IndexOf("def")

        keluaran &= vbCrLf & """def"" berlokasi pada indeks " & _
        huruf.IndexOf("def", 7)

        keluaran &= vbCrLf & """toba"" berlokasi pada indeks " & _
        huruf.IndexOf("toba", 5, 15)

        ' menguji LastIndexOf untuk mencari substring di dalam sebuah string
        keluaran &= vbCrLf & vbCrLf & "Kemunculan terakhir ""def"" berlokasi pada " & _
        "indeks " & huruf.LastIndexOf("def")

        keluaran &= vbCrLf & "Kemunculan terakhir ""def"" berlokasi pada indeks " & _
        huruf.LastIndexOf("def", 25)

        keluaran &= vbCrLf & "Kemunculan terakhir ""toba"" berlokasi pada " & _
        "indeks " & huruf.LastIndexOf("toba", 20, 15)

        ' menguji IndexOfAny untuk mencari kemunculan pertama karakter
        ' di dalam array
        keluaran &= vbCrLf & vbCrLf & "Kemunculan pertama ""c""," & _
        " ""a"" or ""$"" berlokasi pada " & _
        huruf.IndexOfAny(hurufPencarian)

        keluaran &= vbCrLf & "Kemunculan pertama ""c"", ""a"" or " & _
        """$"" berlokasi pada " & _
        huruf.IndexOfAny(hurufPencarian, 7)

        keluaran &= vbCrLf & "Kemunculan pertama ""c"", ""a"" or " & _
        """$"" berlokasi pada " & _
        huruf.IndexOfAny(hurufPencarian, 20, 5)

        ' menguji LastIndexOfAny untuk mencari kemunculan terakhir karakter
        ' di dalam array
        keluaran &= vbCrLf & vbCrLf & "Kemunculan terakhir ""c""," & _
        " ""a"" or ""$"" berlokasi pada " & _
        huruf.LastIndexOfAny(hurufPencarian)

        keluaran &= vbCrLf & "Kemunculan terakhir ""c"", ""a"" or " & _
        """$"" berlokasi pada " & _
        huruf.LastIndexOfAny(hurufPencarian, 1)

        keluaran &= vbCrLf & "Kemunculan terakhir ""c"", ""a"" or " & _
        """$"" berlokasi pada " & _
        huruf.LastIndexOfAny(hurufPencarian, 25, 5)

        MessageBox.Show(keluaran, _
        "Demonstrasi Metode-Metode Kelas String")
    End Sub ' Main

End Module ' modMetodeIndeks

Baris 24-32 menggunakan metode LastIndexOf untuk mencari lokasi kemunculan pertama dari sebuah karakter dalam String. Metode ini melakukan pencarian dari akhir String sampai ke awal String. Jika metode LastIndexOf menemukan karakter yang dicari, ia akan menghasilkan indeks dari karakter tersebut di dalam String; sebaliknya, LastIndexOf akan menghasilkan -1. Ada tiga versi LastIndexOf yang melalukan pencarian karakter di dalam String. Ekspresi pada baris 25 menggunakan versi metode LastIndexOf yang mengambil karakter yang akan dicari sebagai argumen. Ekspresi pada baris 28 menggunakan versi metode LastIndexOf yang mengambil dua argumen, yaitu karakter yang dicari dan indeks tertinggi (dimana pencarian mundur dilakukan). Ekspresi pada baris 31 menggunakan versi ketiga dari metode LastIndexOf yang mengambil tiga argumen, yaitu karakter yang akan dicari, indeks awal pencarian mundur, dan jumlah karakter yang akan dicari (potongan String tempat melakukan pencarian).

Baris 34-51 menggunakan versi IndexOf dan LastIndexOf yang mengambil sebuah String sebagai argumen pertama. Versi ini identik dengan yang dideskripsikan sebelumnya.



Gambar 10.6 Keluaran program pada kode 10.6


Baris 55-79 menggunakan versi IndexOfAny dan LastIndexOfAny yang mengambil sebuah array karakter sebagai argumen pertama. Versi ini identik dengan yang dideskripsikan sebelumnya.


Mengekstrak Substring dari String
Kelas String menyediakan dua metode Substring, yang bisa dipakai untuk menciptakan objek String baru dengan menyalin sebagian dari objek String yang sudah ada. Setiap metode menghasilkan sebuah objek String yang baru. Aplikasi pada kode 10.7 mendemonstrasikan kegunaan dari kedua metode.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
' Kode 10.7: SubString.vb
' Demonstrasi metode Substring.

Imports System.Windows.Forms

Module modSubString

    Sub Main()
        Dim huruf As String = "abcdefghijklmabcdefghijklm"
        Dim keluaran As String
        Dim kutip As Char = ChrW(34)

        ' memanggil metode SubString dan melewatkan kepadanya satu parameter
        keluaran = "Substring dari indeks 20 sampai akhir adalah " & _
        kutip & huruf.Substring(20) & kutip & vbCrLf

        ' memanggil metode SubString dan melewatkan kepadanya dua parameter
        keluaran &= "Substring dari indeks 0 sampai 6 adalah " & _
         kutip & huruf.Substring(0, 6) & kutip

        MessageBox.Show(keluaran, _
        "Demonstrasi Metode Substring")
    End Sub ' Main

End Module ' modSubString



Gambar 10.7 Keluaran program pada kode 10.7


Statemen pada baris 14-15 menggunakan metode Substring yang mengambil satu argumen Integer. Argumen itu menspesifikasi indeks awal dari karaketer-karakter yang akan disalin dari String asli. Substring yang dihasilkan memuat salinan karakter-karakter dari indeks awal sampai akhir String asli. Jika indeks yang dispesifikasi di dalam argumen berada di luar rentang String, maka program akan melemparkan ArgumentOutOfRangeException.

Versi kedua dari metode Substring (baris 19) mengambil dua argumen Integer. Argumen pertama menspesifikasi indeks awal dari semua karakter yang akan disalin dari String asli. Argumen kedua menspesifikasi panjang substring yang akan disalin. Substring yang dihasilkan memuat salinan sejumlah karakter dari String asli.


Menyambung String
Operator & (yang didiskusikan pada Bab 2) bukanlah satu-satunya cara dalam melakukan penyambungan String. Metode Shared Concat dari kelas String (kode 10.8) menyambung dua objek String dan menghasilkan sebuah objek String baru yang memuat karakter-karakter yang digabungkan dari kedua String asli. Baris 18 menyambungkan karakter-karakter dari string2 ke akhir string1 menggunakan metode Concat. Statemen pada baris 18 tidak memodifikasi String asli.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
' Kode 10.8: PenyambunganString.vb
' Demonstrasi Metode Concat kelas String.

Imports System.Windows.Forms

Module modPenyambunganString

    Sub Main()
        Dim string1 As String = "Danau "
        Dim string2 As String = "Toba!!!"
        Dim keluaran As String

        keluaran = "string1 = """ & string1 & """" & _
        vbCrLf & "string2 = """ & string2 & """"

        keluaran &= vbCrLf & vbCrLf & _
        "Hasil dari String.Concat(string1, string2) = " & _
        String.Concat(string1, string2)

        MessageBox.Show(keluaran, _
        "Demonstrasi Metode Concat")
    End Sub ' Main

End Module ' modPenyambunganString



Gambar 10.8 Keluaran program pada kode 10.8


Berbagai Metode String
Kelas String menyediakan beberapa metode yang menghasilkan salinan String termodifikasi. Aplikasi pada kode 10.9 mendemonstrasikan kegunaan dari semua metode tersebut, yang mencakup metode Replace, ToLower, ToUpper, Trim, dan ToString.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
' Kode 10.9: BerbagaiString.vb
' Demonstrasi metode Replace, ToLower, ToUpper, Trim,
' dan ToString.

Imports System.Windows.Forms

Module modBerbagaiString

    Sub Main()
        Dim string1 As String = "Horas!"
        Dim string2 As String = "DANAU TOBA "
        Dim string3 As String = " siantar "
        Dim keluaran As String
        Dim kutip As Char = ChrW(34)
        Dim i As Integer

        keluaran = "string1 = " & kutip & string1 & kutip & _
        vbCrLf & "string2 = " & kutip & string2 & kutip & _
        vbCrLf & "string3 = " & kutip & string3 & kutip

        ' memanggil metode Replace
        keluaran &= vbCrLf & vbCrLf & "Menggantikan " & kutip & "a" & _
        kutip & " dengan " & kutip & "A" & kutip & _
        " di dalam string1: " & kutip & string1.Replace("a"c, "A"c) & _
        kutip

        ' memanggil ToLower dan ToUpper
        keluaran &= vbCrLf & vbCrLf & "string1.ToUpper() = " & _
        kutip & string1.ToUpper() & kutip & vbCrLf & _
        "string2.ToLower() = " & kutip & string2.ToLower() & _
        kutip

        ' memanggil metode Trim
        keluaran &= vbCrLf & vbCrLf & "string3 setelah Trim = " & _
        kutip & string3.Trim() & kutip

        ' memanggil metode ToString
        keluaran &= vbCrLf & vbCrLf & "string1 = " & _
        kutip & string1.ToString() & kutip

        MessageBox.Show(keluaran, _
        "Demonstrasi Berbagai Metode Kelas String")
    End Sub ' Main

End Module ' modBerbagaiString



Gambar 10.9 Keluaran program pada kode 10.9


Baris 24 menggunakan metode Replace untuk menghasilkan sebuah objek String baru, menggantikan setiap karakter “ac dengan karakter “Ac di dalam string1. Metode Replace mengambil dua argumen, yaitu sebuah String yang akan diganti dan String lain yang akan menggantikan setiap kemunculan argumen pertama. String asli tetap tidak berubah. Jika tidak ada kemunculan argumen pertama di dalam String, maka metode menghasilkan String asli.

Metode ToUpper menghasilkan sebuah objek String baru (baris 29) yang menggantikan sembarang huruf kecil dalam string1 dengan huruf besar ekivalennya. Metode ini menghasilkan sebuah objek String baru, memuat String yang terkonversi; String asli tetap tidak berubah. Jika tidak ada karakter yang akan diubah menjadi huruf besar, maka metode akan menghasilkan String asli. Metode ToLower menghasilkan sebuah objek String baru (baris 30) yang menggantikan sembarang huruf besar dalam string1 dengan huruf kecil ekivalennya. Metode ini menghasilkan sebuah objek String baru, memuat String yang terkonversi; String asli tetap tidak berubah. Jika tidak ada karakter yang akan diubah menjadi huruf kecil, maka metode akan menghasilkan String asli.

Baris 35 menggunakan metode Trim untuk menghapus semua karakter spasi yang muncul di awal dan di akhir sebuah String. Tanpa memodifikasi String asli, metode ini menghasilkan sebuah objek String baru yang memuat String (tanpa karakter spasi di depan dan di belakang String tersebut). Versi lain dari metode Trim mengambil sebuah karakter array sebagai argumen, menghapus semua karakter spasi dari awal dan akhir array, dan menempatkan hasilnya di dalam sebuah String.

Baris 39 menggunakan metode ToString untuk menunjukkan bahwa berbagai metode yang dipakai pada aplikasi ini tidak memodifikasi string1. Mengapa metode ToString disediakan untuk kelas String? Dalam Visual Basic .NET, semua objek diderivasi dari kelas Object, yang mendefinisikan metode ToString sebagai Overridable. Jadi, metode ToString dapat dipanggil untuk mendapatkan representasi String atas sembarang objek. Jika sebuah kelas yang mewarisi kelas Object (seperti kelas String) tidak mendefinisikan-ulang metode ToString, maka kelas tersebut menggunakan versi default dari kelas Object, menghasilkan sebuah String yang memuat nama kelas objek.


Kelas StringBuilder
Kelas String menyediakan beberapa kapabilitas untuk memproses String. Namun, isi String tersebut tidak akan berubah. Operasi, yang kelihatan seperti menyambung dua String, pada kenyataannya, menugaskan referensi-referensi String kepada String yang baru saja diciptakan (misalnya, operator &= menciptakan sebuah String baru dan menugaskan referensi String asli kepada String yang baru saja diciptakan).

Pada beberapa diskusi ke depan, beberapa fitur kelas StringBuilder (namespace System.Text) akan dipakai untuk menciptakan dan memanipulasi informasi string secara dinamis. Setiap StringBuilder dapat menyimpan sejumlah tertentu karakter yang dispesifikasi oleh kapasitasnya. Penyimpanan yang melebihi kapasitas suatu StringBuilder menyebabkan kapasitas menjadi mengembang untuk mengakomodasi karakter-karakter tambahan. Seperti yang akan Anda perhatikan, beberapa anggota kelas StringBuilder, seperti metode Append dan AppendFormat, dapat digunakan untuk operasi penyambungan seperti operator & dan &= pada kelas String.

Kelas StringBuilder menyediakan enam konstruktor teroverload. Module modKonstruktor-Builder (kode 10.10) mendemonstrasikan kegunaan dari tiga konstruktor teroverload tersebut.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
' Kode 10.10: KonstruktorStringBuilder.vb
' Demonstrasi konstruktor kelas StringBuilder.

Imports System.Text
Imports System.Windows.Forms

Module modKonstruktorBuilder

    Sub Main()
        Dim buffer1, buffer2, buffer3 As StringBuilder
        Dim kutip As Char = ChrW(34)
        Dim keluaran As String

        buffer1 = New StringBuilder()
        buffer2 = New StringBuilder(10)
        buffer3 = New StringBuilder("hallo")

        keluaran = "buffer1 = " & kutip & buffer1.ToString() & _
        kutip & vbCrLf

        keluaran &= "buffer2 = " & kutip & _
         buffer2.ToString() & kutip & vbCrLf

        keluaran &= "buffer3 = " & kutip & _
        buffer3.ToString() & kutip

        MessageBox.Show(keluaran, _
        "Demonstrasi Konstruktor Kelas StringBuilder")
    End Sub ' Main

End Module ' modKonstruktorBuilder



Gambar 10.10 Keluaran program pada kode 10.10


Baris 14 menggunakan konstruktor StringBuilder tanpa-argumen untuk menciptakan sebuah StringBuilder yang tidak memuat karakter apapun dan memiliki kapasitas awal default 16 karakter. Baris 15 menggunakan konstruktor StringBuilder yang mengambil sebuah argumen Integer untuk menciptakan sebuah StringBuilder yang tidak memuat karakter apapun dan memiliki kapasitas awal yang dispesifikasi di dalam argumen Integer. Baris 16 menggunakan konstruktor StringBuilder yang mengambil sebuah argumen String untuk menciptakan sebuah StringBuilder yang memuat karakter-karakter argumen String.

Baris 18-25 menggunakan metode StringBuilder, ToString, untuk mendapatkan representasi String atas isi objek StringBuilder. Metode ini menghasilkan string yang dimuat oleh String-Builder.


StringBuilder: Properti Length dan Capacity, dan Metode EnsureCapacity
Kelas StringBuilder menyediakan properti Length dan Capacity untuk menghasilkan jumlah karakter yang berada di dalam sebuah StringBuilder dan jumlah karakter yang dapat disimpan di dalam sebuah StringBuilder tanpa perlu mengalokasikan memori lebih. Kedua properti juga dapat menambah atau mengurangi panjang atau kapasitas StringBuilder.

Metode EnsureCapacity membolehkan programer untuk menjamin bahwa sebuah StringBuilder memiliki kapasitas yang mereduksi berapa kali kapasitas harus ditambah. Metode EnsureCapacity menggandakan kapasitas terkini  instans StringBuilder. Jika nilai yang digandakan ini lebih besar dari nilai yang diinginkan programer, maka nilai ini menjadi kapasitas baru. Sebaliknya, EnsureCapacity mengubah kapasitas dengan menambahkan satu pada kapasitas yang diinginkan diinginkan programer. Sebagai contoh, jika kapasitas terkini adalah 17 dan Anda ingin mengubahnya menjadi 40, maka 17 yang dikalikan 2 tidak lebih besar dari 40, sehingga akan dihasilkan kapasitas baru menjadi 41. Jika kapasitas terkini adalah 23 dan diinginkan untuk mengubanya menjadi 40, maka 23 yang dikalikan 2 akan menjadi kapasitas baru (46). Program pada kode 10.11 mendemonstrasikan kegunaan dari metode dan properti StringBuilder.

Program memuat satu StringBuilder, dinamakan buffer. Baris 11-12 menggunakan konstruktor StringBuilder yang mengambil sebuah argumen String untuk menginstansiasi StringBuilder dan menginisialisasinya dengan “Hallo, apa kabarmu?”. Baris 15-17 menampilkan isi, panjang, dan kapasitas StringBuilder. Pada jendela keluaran, perhatikan bahwa kapasitas awalnya adalah 32.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
' Kode 10.11: FiturStringBuilder.vb
' Demonstrasi beberapa fitur kelas StringBuilder.

Imports System.Text
Imports System.Windows.Forms

Module modFiturBuilder

    Sub Main()
        Dim i As Integer
        Dim buffer As StringBuilder = _
        New StringBuilder("Hallo, apa kabarmu?")

        ' menggunakan properti Length dan Capacity
        Dim output As String = "buffer = " & buffer.ToString & _
        vbCrLf & "Panjang = " & buffer.Length & vbCrLf & _
        "Kapasitas = " & buffer.Capacity

        ' menggunakan metode EnsureCapacity
        buffer.EnsureCapacity(75)

        output &= vbCrLf & vbCrLf & "Kapasitas baru = " & _
        buffer.Capacity

        ' memotong StringBuilder dengan menetapkan properti Length
        buffer.Length = 10

        output &= vbCrLf & vbCrLf & "Panjang baru = " & _
        buffer.Length & vbCrLf & "buffer = "

        ' menggunakan Indekse StringBuilder
        For i = 0 To buffer.Length - 1
            output &= buffer(i)
        Next

        MessageBox.Show(output, "Beberapa fitur StringBuilder")
    End Sub ' Main

End Module ' modFiturBuilder

Baris 20 mengekspansi kapasitas StringBuilder menjadi minimum 75 karakter. Kapasitas terkini (32) yang dikalikan dengan 2 akan bernilai kurang dari 75, sehingga metode EnsureCapacity menambah kapasitas menjadi satu lebih besar dari 75 (yaitu, 76). Jika beberapa karakter baru ditambahkan ke dalam sebuah StringBuilder sehingga panjangnya melebihi kapasitasnya, maka kapasitasnya akan diekspansi untuk mengakomodasi karakter-karakter tambahan dengan cara yang sama ketika metode EnsureCapacity dipanggil.



Gambar 10.11 Keluaran program pada kode 10.11


Baris 26 menggunakan aksesor Set pada properti Length untuk menetapkan panjang String-Builder menjadi 10. Jika panjang yang dispesifikasi kurang dari jumlah karakter terkini di dalam StringBuilder, maka isi StringBuilder akan dipotong sesuai panjang yang diinginkan. Jika panjang yang dispesifikasi lebih dari jumlah karakter terkini di dalam StringBuilder, maka beberapa karakter null (karakter dengan representasi numerik 0, yang menandai akhir sebuah String) ditambahkan ke dalam StringBuilder sampai jumlah total karakter di dalam StringBuilder sama dengan panjang yang diinginkan.


Metode StringBuilder: Append dan AppendFormat
Kelas StringBuilder menyediakan 19 metode Append teroverload yang membolehkan nilai-nilai berbagai tipe data untuk ditambahkan ke akhir sebuah StringBuilder. Visual Basic menyediakan beberapa versi metode Append untuk tiap tipe data primitif dan untuk array karakter, String, dan Object. Tiap versi metode ini mengambil sebuah argumen, mengkonversinya menjadi sebuah String, dan menambahkannya (menempelkannya) pada StringBuilder. Kode 10.12 mendemons-trasikan kegunaan dari beberapa metode Append.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
' Kode 10.12: AppendStringBuilder.vb
' Demonstrasi beberapa metode Append pada kelas StringBuilder.

Imports System.Text
Imports System.Windows.Forms

Module modAppendBuilder

    Sub Main()
        Dim nilaiObjek As Object = "hallo"
        Dim nilaiString As String = "selamat jalan"
        Dim arrayKarakter As Char() = {"a"c, "b"c, "c"c, _
            "d"c, "e"c, "f"c}

        Dim nilaiBoolean As Boolean = True
        Dim nilaiKarakter As Char = "Z"c
        Dim nilaiInteger As Integer = 7
        Dim nilaiLong As Long = 1000000
        Dim nilaiSingle As Single = 2.5
        Dim nilaiDouble As Double = 33.333
        Dim buffer As StringBuilder = New StringBuilder()

        ' menggunakan metode Append untuk menempelkan nilai-nilai pada buffer
        buffer.Append(nilaiObjek)
        buffer.Append(" ")
        buffer.Append(nilaiString)
        buffer.Append(" ")
        buffer.Append(arrayKarakter)
        buffer.Append(" ")
        buffer.Append(arrayKarakter, 0, 3)
        buffer.Append(" ")
        buffer.Append(nilaiBoolean)
        buffer.Append(" ")
        buffer.Append(nilaiKarakter)
        buffer.Append(" ")
        buffer.Append(nilaiInteger)
        buffer.Append(" ")
        buffer.Append(nilaiLong)
        buffer.Append(" ")
        buffer.Append(nilaiSingle)
        buffer.Append(" ")
        buffer.Append(nilaiDouble)

        MessageBox.Show("buffer = " & buffer.ToString(), _
            "Demonstrasi Metode Append StringBuilder", _
        MessageBoxButtons.OK, MessageBoxIcon.Information)
    End Sub ' Main

End Module ' modAppendBuilder


Gambar 10.12 Keluaran program pada kode 10.12


Baris 24-42 menggunakan 10 metode Append teroverload untuk menempelkan objek-objek yang diciptakan pada baris 10-21 di akhir StringBuilder. Metode Append berperilaku sama dengan operator & yang digunakan pada String.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
' Kode 10.13: AppendFormatStringBuilder.vb
' Demonstrasi metode AppendFormat.

Imports System.Text
Imports System.Windows.Forms

Module modAppendFormatBuilder

    Sub Main()
        Dim buffer As StringBuilder = New StringBuilder()
        Dim string1, string2 As String

        ' string terformat
        string1 = "{0} ini seharga: {1:C}." & vbCrLf

        ' string1
        Dim arrayObjek As Object() = New Object(1) {}

        arrayObjek(0) = "mobil"
        arrayObjek(1) = 1234.56

        ' menempelkan pada buffer
        buffer.AppendFormat(string1, arrayObjek)

        ' string terformat
        string2 = "Angka:{0:D3}. " & vbCrLf & _
        "Angka disejajarkan ke kanan dengan spasi:{0, 4}." & vbCrLf & _
        "Angka disejajarkan ke kiri dengan spasi:{0, -4}."

        ' menempelkan pada buffer
        buffer.AppendFormat(string2, 5)

        ' menampilkan string terformat
        MessageBox.Show(buffer.ToString(), "Menggunakan AppendFormat", _
        MessageBoxButtons.OK, MessageBoxIcon.Information)
    End Sub ' Main

End Module ' modAppendFormatBuilder


Gambar 10.13 Keluaran program pada kode 10.13


Kelas StringBuilder juga menyediakan metode AppendFormat, yang mengkonversi sebuah String menjadi format tertentu dan menempelkannya pada StringBuilder. Sebagai contoh, kode 10.13 mendemonstrasikan kegunaan dari metode ini.

Baris 14 menciptakan sebuah String yang memuat informasi pemformatan. Informasi yang diapit kurung kurawal menentukan bagaiman memformat data.

Baris 31 menggunakan sebuah versi dari AppendFormat, yang mengambil dua parameter: sebuah String yang memuat sebuah format dan sebuah objek (dimana, format diterapkan pada objek itu). Pada kasus ini, objek adalah angka 5. Keluaran dari kode 10.13 menampilkan hasil dari penerapan kedua versi AppendFormat.



Metode StringBuilder: Insert, Remove, dan Replace
Kelas StringBuilder menyediakan 18 metode Insert teroverload untuk memampukan nilai-nilai berbagai tipe data disisipkan pada sembarang posisi di dalam sebuah StringBuilder. Kelas ini menyediakan beberapa versi untuk tiap tipe data primitif dan untuk array karakter, String, dan Object. Setiap metode mengambil argumen keduanya, mengkonversinya menjadi sebuah String, dan menyisipkan String tersebut di dalam StringBuilder di depan indeks yang dispesifikasi oleh argumen pertama. Indeks yang dispesifikasi oleh argumen pertama harus lebih besar dari atau sama dengan 0 dan kurang dari panjang StringBuilder; sebaliknya, program akan melemparkan sebuah ArgumentOutOfRangeException.

Kelas StringBuilder juga menyediakan metode Remove untuk menghapus penggalan StringBuilder. Metode Remove mengambil dua argumen, yaitu indeks dimana penghapusan dimulai dan jumlah karakter yang akan dihapus. Penjumlahan atas indeks awal dan jumlah karakter yang akan dihapus harus selalu kurang dari panjang StringBuilder; jika tidak, program akan melemparkan sebuah ArgumentOutOfRangeException. Metode Insert dan Remove didemons-trasikan pada kode 10.14.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
' Kode 10.14: StringBuilderInsertRemove.vb
' Demonstrasi metode Insert dan Remove dari
' kelas StringBuilder.

Imports System.Text
Imports System.Windows.Forms

Module modBuilderInsertRemove

    Sub Main()
        Dim nilaiObjek As Object = "hallo"
        Dim nilaiString As String = "selamat jalan"
        Dim characterArray As Char() = {"a"c, "b"c, "c"c, _
            "d"c, "e"c, "f"c}

        Dim nilaiBoolean As Boolean = True
        Dim nilaiKarakter As Char = "K"c
        Dim nilaiInteger As Integer = 7
        Dim nilaiLong As Long = 10000000
        Dim nilaiSingle As Single = 2.5
        Dim nilaiDoble As Double = 33.333
        Dim buffer As StringBuilder = New StringBuilder()
        Dim keluaran As String

        ' menyisipkan ke dalam buffer
        buffer.Insert(0, nilaiObjek)
        buffer.Insert(0, " ")
        buffer.Insert(0, nilaiString)
        buffer.Insert(0, " ")
        buffer.Insert(0, characterArray)
        buffer.Insert(0, " ")
        buffer.Insert(0, nilaiBoolean)
        buffer.Insert(0, " ")
        buffer.Insert(0, nilaiKarakter)
        buffer.Insert(0, " ")
        buffer.Insert(0, nilaiInteger)
        buffer.Insert(0, " ")
        buffer.Insert(0, nilaiLong)
        buffer.Insert(0, " ")
        buffer.Insert(0, nilaiSingle)
        buffer.Insert(0, " ")
        buffer.Insert(0, nilaiDoble)
        buffer.Insert(0, " ")

        keluaran = "buffer setelah Inserts:" & vbCrLf & _
        buffer.ToString() & vbCrLf & vbCrLf

        buffer.Remove(10, 1) ' menghapus 5 di dalam 2.5
        buffer.Remove(2, 4) ' menghapus .333 di dalam 33.333

        keluaran &= "buffer setelah Removes:" & vbCrLf & _
        buffer.ToString()

        MessageBox.Show(keluaran, "Demonstrasi Metode " & _
            "Insert dan Remove", MessageBoxButtons.OK, _
            MessageBoxIcon.Information)
    End Sub ' Main

End Module ' modBuilderInsertRemove



Gambar 10.14 Keluaran program pada kode 10.14


Metode lain yang berguna adalah Replace. Metode Replace mencari String atau karakter tertentu dan menggantinya dengan String atau karakter lain. Kode 10.15 mendemonstrasikan metode ini.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
' Kode 10.15: StringBuilderReplace.vb
' Demonstrasi metode Replace.

Imports System.Text
Imports System.Windows.Forms

Module modBuilderReplace

    Sub Main()
        Dim builder1 As StringBuilder = _
        New StringBuilder("Selamat Ulang Tahun Vivian")

        Dim builder2 As StringBuilder = _
        New StringBuilder("selamat jalan sihol")

        Dim output As String = "Sebelum Replace:" & vbCrLf & _
        builder1.ToString() & vbCrLf & builder2.ToString()

        builder1.Replace("Vivian", "Sihol")
        builder2.Replace("s"c, "S"c, 0, 5)

        output &= vbCrLf & vbCrLf & "Setelah Replace:" & _
        vbCrLf & builder1.ToString() & vbCrLf & _
        builder2.ToString()

        MessageBox.Show(output, _
            "Menggunakan Metode Replace Kelas StringBuilder", _
            MessageBoxButtons.OK, MessageBoxIcon.Information)
    End Sub ' Main

End Module ' modBuilderReplace



Gambar 10.15 Keluaran program pada kode 10.15


Baris 19 menggunakan metode Replace untuk menggantikan StringVivian” dengan StringSihol” di dalam builder1. Versi teroverload lain dari metode ini mengambil dua karakter dua karakter sebagai parameter dan menggantikan semua karakter pada parameter pertama dengan karakter pada parameter kedua. Baris 20 menggunakan sebuah Replace teroverload yang mengambil empat parameter, dimana dua parameter pertama adalah karakter dan dua parameter kedua adalah Integer. Metode ini mengganti semua karakter pertama dengan karakter kedua, diawali dari indeks yang dispesifikasi oleh Integer pertama dan berlanjut sampai sejumlah karakter selanjutnya yang dispesifikasi oleh Integer kedua.


Struktur Char
Visual Basic menyediakan blok pembangun program, dikenal dengan struktur, yang sama dengan kelas. Seperti kelas, struktur memuat metode dan properti. Baik kelas maupun struktur menggunakan pemodifikasi yang sama (seperti Public, Private, dan Protected) dan pengaksesan anggota dilakukan menggunakan operator dot (.). Namun, kelas diciptakan menggunakan katakunci Class, sedangkan struktur diciptakan menggunakan katakunci Structure. Saat ini, akan disajikan struktur Char, yang merupakan struktur untuk karakter.

Kebanyakan metode struktur Char adalah Shared, yang mengambil sedikitnya satu argumen karakter dan yang melakukan pengujian atau pemanipulasian karakter. Kode 10.16 mendemons-trasikan beberapa metode Shared yang menguji karakter untuk menentukan apa tipe karakter tersebut.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
' Kode 10.16: MetodeChar.vb
' Demonstrasi pengujian karakter menggunakan metode-metode
' Shared dari struktur Char

Public Class FrmKarakter
    Inherits Form

    Friend WithEvents lblEnter As Label ' meminta masukan

    Friend WithEvents txtMasukan As TextBox ' membaca sebuah Char
    Friend WithEvents txtKeluaran As TextBox ' menampilkan hasil

    ' membaca dan menampilkan informasi tentang masukan
    Friend WithEvents cmdAnalisa As Button

    ' kode yang dibangkitkan oleh Visual Studio .NET

    ' menangani event klik cmdAnalisa
    Private Sub cmdAnalisa_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles cmdAnalisa.Click

        Dim karakter As Char = Convert.ToChar(txtMasukan.Text)

        BangunKeluaran(karakter)
    End Sub  ' cmdAnalisa_Click

    ' menampilkan informasi karakter di dalam txtKeluaran
    Public Sub BangunKeluaran(ByVal karakterMasukan As Char)
        Dim keluaran As String

        keluaran = "apakah dijit: " & _
        Char.IsDigit(karakterMasukan) & vbCrLf

        keluaran &= "apakah huruf: " & _
        Char.IsLetter(karakterMasukan) & vbCrLf

        keluaran &= "apakah huruf atau dijit: " & _
        Char.IsLetterOrDigit(karakterMasukan) & vbCrLf

        keluaran &= "apakah huruf kecil: " & _
        Char.IsLower(karakterMasukan) & vbCrLf

        keluaran &= "apakah huruf besar: " & _
        Char.IsUpper(karakterMasukan) & vbCrLf

        keluaran &= "menjadi huruf besar: " & _
        Char.ToUpper(karakterMasukan) & vbCrLf

        keluaran &= "menjadi huruf kecil: " & _
        Char.ToLower(karakterMasukan) & vbCrLf

        keluaran &= "apakah tanda baca: " & _
        Char.IsPunctuation(karakterMasukan) & vbCrLf

        keluaran &= "apakah simbol: " & Char.IsSymbol(karakterMasukan)

        txtKeluaran.Text = keluaran
    End Sub ' BangunKeluaran

End Class



Gambar 10.16 Keluaran program pada kode 10.16


Aplikasi Windows memuat sebuah prompt, yaitu sebuah TextBox, untuk meminta pengguna memasukkan sebuah karakter, sebuah tombol yang dapat ditekan pengguna setelah memasukkan karakter, dan sebuah TextBox kedua yang menampilkan hasil analisa. Ketika pengguna mengklik tombol Analisa Karakter, event handler cmdAnalisa_Click (baris 19-25) dipanggil. Metode ini mengkonversi data yang dimasukkan dari sebuah String menjadi sebuah Char menggunakan metode Convert.ToChar (baris 22). Pada baris 24, metode BangunKeluaran dipanggil, yang didefinisikan pada baris 28-58.

Baris 32 menggunakan metode IsDigit untuk menentukan apakah karakter karakterMasukan didefinisikan sebagai sebuah dijit. Jika ya, metode ini akan menghasilkan True; sebaliknya, ia menghasilkan False.

Baris 35 menggunakan metode IsLetter untuk menentukan apakah karakter karakterMasukan adalah sebuah huruf atau bukan. Jika ya, metode ini menghasilkan True; sebaliknya, ia menghasilkan False. Baris 38 menggunakan metode IsLetterOrDigit untuk menentukan apakah karakter karakterMasukan adalah sebuah huruf atau sebuah dijit. Jika ya, metode ini menghasilkan True; sebaliknya, ia menghasilkan False.

Baris 41 menggunakan metode IsLower untuk menentukan apakah karakter karakterMasukan adalah sebuah huruf kecil atau tidak. Jika ya, metode ini menghasilkan True; sebaliknya, ia menghasilkan False. Baris 44 menggunakan metode IsUpper untuk menentukan apakah karakter karakterMasukan adalah sebuah huruf besar atau tidak. Jika ya, metode ini menghasilkan True; sebaliknya, ia menghasilkan False. Baris 47 menggunakan metode ToUpper untuk mengkonversi karakter karakterMasukan menjadi huruf besar ekivalennya. Metode ini menghasilkan karakter terkonversi jika karakter tersebut memiliki huruf besar ekivalen; sebaliknya, metode ini menghasilkan argumen asli. Baris 50 menggunakan metode ToLower untuk untuk mengkonversi karakter karakterMasukan menjadi huruf kecil ekivalennya. Metode ini menghasilkan karakter terkonversi jika karakter tersebut memiliki huruf kecil ekivalen; sebaliknya, metode ini menghasilkan argumen asli.

Baris 53 menggunakan metode IsPunctuation untuk menentukan apakah karakter karakterMasukan adalah sebuah tanda baca atau tidak. Jika ya, metode menghasilkan True; sebaliknya, ia menghasilkan False. Baris 55 menggunakan metode IsSymbol untuk menentukan apakah karakter karakterMasukan adalah sebuah simbol atau tidak. Jika ya, metode menghasilkan True; sebaliknya, ia menghasilkan False.


Simulasi Pengacakan Kartu
Sekarang, akan dibangkitkan bilangan acak untuk mengembangkan sebuah program yang mensimulasikan pengacakan kartu. Setelah diciptakan, program ini dapat diimplementasikan di dalam program-program yang mirip dengan permainan kartu yang lain.

Aplikasi TumpukanKartu (kode 10.18) akan dikembangkan, yang menciptakan setumpukan 52 kartu menggunakan objek CKartu. Pengguna dapat membagikan kartu dengan mengklik tombol Bagikan Kartu. Setiap kartu yang dibagikan ditampilkan di dalam sebuah Label. Pengguna juga dapat mengacak tumpukan kartu dengan mengklik tombol Acak Kartu.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
' Kode 10.17: Card.vb
' Menyimpan informasi tentang jenis dan muka setiap kartu.

Public Class CKartu
    Private muka As String
    Private jenis As String

    Public Sub New(ByVal nilaiMuka As String, _
        ByVal nilaiJenis As String)

        muka = nilaiMuka
        jenis = nilaiJenis
    End Sub ' New

    Public Overrides Function ToString() As String
        Return muka & " dari " & jenis
    End Function ' ToString

End Class ' CKartu

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
' Kode 10.18: TumpukanKartu.vb
' Pengacakan dan pembagian kartu.

Public Class FrmKartu
    Inherits Form

    Friend WithEvents lblTampil As Label ' menampilkan kartu yang dibagi
    Friend WithEvents lblStatus As Label ' nomor kartu yang dibagi

    Friend WithEvents cmdBagikan As Button ' membagikan satu kartu
    Friend WithEvents cmdAcak As Button ' mengacak kartu

    ' kode yang dibangkitkan oleh Visual Studio .NET

    Private kartuSekarang As Integer
    Private objekAcak As Random = New Random()
    Private tumpukan As CKartu() = New CKartu(51) {}

    ' handles form at load time
    Public Sub FrmKartu_Load(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles MyBase.Load

        Dim muka As String() = {"Ace", "Deuce", "Three", _
        "Four", "Five", "Six", "Seven", "Eight", "Nine", _
        "Ten", "Jack", "Queen", "King"}

        Dim jenis As String() = {"Hearts", "Diamonds", "Clubs", _
        "Spades"}

        Dim i As Integer

        ' tidak ada kartu yang dibagikan
        kartuSekarang = -1

        ' inisialisasi tumpukan
        For i = 0 To tumpukan.GetUpperBound(0)
            tumpukan(i) = New CKartu(muka(i Mod 13), jenis(i Mod 4))
        Next

    End Sub ' FrmKartu_Load

    ' menangani cmdBagikan_Click
    Private Sub cmdBagikan_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles cmdBagikan.Click

        Dim bagikan As CKartu = BagikanKartu()

        ' jika kartu yang dibagikan Null, maka tidak ada kartu lagi
        ' pengguna harus mengacak kartu
        If Not (bagikan Is Nothing) Then
            lblTampil.Text = bagikan.ToString()
            lblStatus.Text = "Kartu #: " & kartuSekarang
        Else
            lblTampil.Text = "TIDAK ADA KARTU LAGI UNTUK DIBAGIKAN"
            lblStatus.Text = "Acak kartu untuk melanjutkan"
        End If

    End Sub  ' cmdBagikan_Click

    ‘ mengacak kartu
    Public Sub Acak()
        Dim i As Integer
        Dim j As Integer
        Dim nilaiSementara As CKartu

        kartuSekarang = -1

        ' menukar setiap kartu dengan kartu acak
        For i = 0 To tumpukan.GetUpperBound(0)
            j = objekAcak.Next(52)

            ' menukar kartu
            nilaiSementara = tumpukan(i)
            tumpukan(i) = tumpukan(j)
            tumpukan(j) = nilaiSementara
        Next

        cmdBagikan.Enabled = True
    End Sub ' Acak

    Public Function BagikanKartu() As CKartu

        ' jika masih ada kartu, maka bagikan kepada pemain
        ' sebaliknya beritahu bahwa kartu perlu diacak
        ' dengan menon-aktifkan cmdBagi dan menghasilkan Nothing
        If (kartuSekarang + 1) < tumpukan.GetUpperBound(0) Then
            kartuSekarang += 1

            Return tumpukan(kartuSekarang)
        Else
            cmdBagikan.Enabled = False

            Return Nothing
        End If

    End Function ' BagikanKartu

    ' menangani cmdAcak_Click
    Private Sub cmdAcak_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles cmdAcak.Click

        lblTampil.Text = "MENGACAK..."

        Acak()

        lblTampil.Text = "TUMPUKAN DIACAK"
    End Sub  ' cmdAcak_Click

End Class



Gambar 10.17 Keluaran program pada kode 10.18


Kelas CKartu (kode 10.17) memuat dua variabel instans String, yaitu muka dan jenis, yang menyimpan referensi yang menunjuk ke nama muka dan nama jenis dari kartu tertentu. Konstruktor untuk kelas ini menerima dua String yang dipakai untuk menginisialisasi muka dan jenis. Metode ToString menciptakan sebuah String yang memuat muka kartu dan jenis kartu.

Metode FrmTumpukan_Load (baris 20-40 pada kode 10.18) menggunakan struktur For (baris 36-38) untuk mengisi array tumpukan dengan CKartu. Perhatikan bahwa setiap CKartu diinstansiasi dan diinisialisasi dengan dua String, yaitu satu dari array muka (StringAce” sampai “King”) dan satu lagi dari array jenis (“Hearts”, “Diamonds”, “Clubs”, atau “Spades”). Kalkulasi pada i Mod 13 selalu menghasilkan sebuah nilai dari 0 sampai 12 (tiga belas subskript pada array muka), dan kalkulasi pada i Mod 4 selalu menghasilkan sebuah nilai dari 0 sampai 3 (empat subskript pada array jenis).

Ketika pengguna mengklik tombol Bagikan Kartu, event handler cmdBagikan_Click (baris 43) memanggil metode BagikanKartu (yang didefinisikan pada baris 81-96) untuk mendapatkan kartu selanjutnya di dalam array tumpukan. Jika tumpukan tidak kosong, maka metode ini menghasilkan sebuah referensi objek CKartu; sebaliknya, ia menghasilkan Nothing. Jika referensi tidak Nothing, baris 51-52 akan menampilkan CKartu pada lblTampil dan menampilkan nomor kartu pada lblStatus.

Jika BagikanKartu menghasilkan referensi Nothing, maka StringTIDAK ADA KARTU LAGUNTUK DIBAGIKAN” akan ditampilan pada lblTampil, dan StringAcak kartu untuk melanjutkan” akan ditampilkan pada lblStatus.

Ketika pengguna mengklik tombol Acak Kartu, metode event handler cmdAcak_Click (baris 99-107) akan memanggil metode Acak (didefinisikan pada baris 61) untuk mengacak kartu. Metode ini kemudian menjelajah menggunakan loop melalui semua 52 kartu (array dengan subskript 0-51). Kemudian objek CKartu terkini dan objek CKartu yang dipilih secara acak akan ditukar di dalam array. Ketika pengacakan selesai, lblTampil menampilkan StringTUMPUKAN DIACAK”.


Ekspresi Reguler dan Kelas Regex
Ekspresi reguler umumnya adalah String terformat yang dipakai untuk mencari pola dalam teks dan berguna untuk validasi informasi, untuk memastikan bahw data dalam format tertentu. Sebagai contoh, kode pos harus memuat lima dijit (misalnya), dan nama akhir harus diawali dengan huruf besar (misalnya). Salah satu aplikasi dari ekspresi reguler adalah untuk memfasilitasi konstruksi sebuah kompiler. Seringkali, ekspresi reguler yang kompleks dipakai untuk memvalidasi sintaks sebuah program. Jika kode program tidak cocok dengan ekspresi reguler, maka kompiler akan mengetahui bahwa terjadi error sintaks pada kode tersebut.

Framework .NET menyediakan kelas Regex (namespace System.Text.RegularExpressions) untuk menolong pada pengembang mengenali dan memanipulasi ekspresi reguler. Kelas Regex menyediakan metode Match, yang menghasilkan sebuah objek kelas Match yang merepresentasikan ekspresi reguler yang cocok. Regex juga menyediakan metode Matches, yang menemukan semua kecocokan dari sebuah ekspresi reguler dalam String dan menghasilkan sebuah objek MatchCollection.

Tabel pada Gambar 10.18 menspesifikasi beberapa grup karakter yang dapat dipakai dengan ekspresi reguler. Grup karakter merupakan sebuah runtun escape yang merepresentasikan sekelompok karakter.

Karakter word adalah sembarang karakter alfanumerik atau karakter garis-bawah. Karakter spasi-putih adalah sebuah spasi, tab, carriage return, atau garis-baru. Dijit adalah sembarang karakter numerik. Ekspresi numerik tidak dibatasi pada grup-grup karakter tersebut. Ekspresi reguler dapat menggunakan berbagai operator dan format notasi dalam mencari pola yang kompleks. Beberapa teknik pencarian pola dalam teks akan disajikan pada contoh selanjutnya.

Kode 10.19 menyajikan sebuah contoh sederhana yang menggunakan ekspresi reguler. Program ini mengambil tanggal-lahir dan mencoba untuk mencocokkannya dengan ekspresi reguler.

Karakter
Cocok dengan
Karakter
Cocok dengan
\d
\w
\s
sembarang dijit
sembarang karakter word
sembarang spasi putih
\D
\W
\S
sembarang tak-dijit
sembarang karakter tak -word
sembarang tak -spasi-putih

Gambar 10.18 Grup-grup karakter

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
' Kode 10.19: RegexCocok.vb
' Demonstrasi kelas Regex.

Imports System.Text.RegularExpressions
Imports System.Windows.Forms

Module modRegexCocok

    Sub Main()
        Dim keluaran As String = ""
        Dim cocokKu As Match

        ' menciptakan ekspresi reguler
        Dim ekspresi As Regex = _
            New Regex("U.*\d[0-35-9]-\d\d-\d\d")

        Dim string1 As String = "Ultah Vivian adalah 05-12-75" & _
            vbCrLf & "Tanggal lahir Sihol adalah 11-04-68" & vbCrLf & _
            "Tanggal lahir Rotua adalah 04-28-73" & vbCrLf & _
            "Ultah Rico adalah 12-17-77"

        ' mencocokkan ekspresi reguler dengan string dan
        ' menampilkan semua kecocokan
        For Each cocokKu In ekspresi.Matches(string1)
            keluaran &= cocokKu.ToString() & vbCrLf
        Next

        MessageBox.Show(keluaran, "Menggunakan Kelas Regex", _
            MessageBoxButtons.OK, MessageBoxIcon.Information)
    End Sub ' Main

End Module ' modRegexCocok



Gambar 10.19 Keluaran program pada kode 10.19


Baris 15 menciptakan sebuah instans kelas Regex dan mendefinisikan pola ekspresi reguler yang akan dicari Regex. Karakter pertama dalam ekspresi reguler, “U”, diperlakukan sebagai karakter literal. Ini berarti bahwa sembarang String yang cocok dengan ekspresi reguler ini harus diawali dengan “U”.

Dalam sebuah ekspresi reguler, karakter dor “.” menyatakan kecocokan dengan sembarang karakter tunggal kecuali sebuah karakter garis-baru. Namun, ketika karakter dot diikuti dengan sebuah asterisk, seperti dalam ekspresi “.*”, artinya ia cocok dengan sembarang karakter (yang tidak ditentukan).

Seperti dicantumkan pada Gambar 10.18, “\d” memiliki kecocokan dengan sembarang dijit. Untuk menspesifikasi rentang karakter atau nilai, digunakan kurung siku, [ ]. Sebagai contoh, pola “[aiueo]” dapat dipakai untuk mencocokkan sembarang vokal. Rentang karakter dapat direpresentasikan dengan sebuah garis-hubung (-) di antara dua karakter. Dalam contoh, pola cocok dengan sembarang dijit di antara 0 dan 3 atau antara 5 dan 9; oleh karena itu, ia cocok dengan sembarang dijit kecuali 4. Jika karakter pertama di dalam kurung siku adalah “^”, maka ekspresi akan menerima sembarang karakter selain yang diindikasikan.

Baris 24-26 menggunakan sebuah loop For Each untuk beriterasi melalui setiap Match yang didapatkan dari ekspresi.Matches, yang menggunakan string1 sebagai argumen. Keluaran pada Gambar 10.19 mengindikasikan dua kecocokan yang ditemukan di dalam string1. Perhatikan bahwa kedua kecocokan sesuai dengan pola yang dispesifikasi oleh ekspresi reguler.

Gambar 10.20 mencantumkan beberapa kuantifator dan kegunaannya di dalam ekspresi reguler.

Kuantifator
Cocok dengan
*
+
?
{n}
{n,}
{n,m}
cocok dengan nol atau lebih kemunculan pola.
cocok dengan satu atau lebih kemunculan pola.
cocok dengan nol atau satu kemunculan pola.
cocok dengan n kemunculan pola.
cocok dengan sedikitnya n kemunculan pola.
cocok dengan antara n dan m kemunculan pola.

Gambar 10.20 Beberapa kuantifator yang digunakan dalam ekspresi reguler

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
' Kode 10.20: Validasi.vb
' Validasi informasi pengguna menggunakan ekspresi reguler.

Imports System.Text.RegularExpressions

Public Class FrmValid
    Inherits Form

    ' bidang label
    Friend WithEvents lblAkhir As Label
    Friend WithEvents lblPertama As Label
    Friend WithEvents lblAlamat As Label
    Friend WithEvents lblKota As Label
    Friend WithEvents lblPropinsi As Label
    Friend WithEvents lblPost As Label
    Friend WithEvents lblTelp As Label

    ' bidang masukan
    Friend WithEvents txtAkhir As TextBox
    Friend WithEvents txtPertama As TextBox
    Friend WithEvents txtAlamat As TextBox
    Friend WithEvents txtKota As TextBox
    Friend WithEvents txtPropinsi As TextBox
    Friend WithEvents txtPost As TextBox
    Friend WithEvents txtTelp As TextBox

    Friend WithEvents cmdOK As Button ' memvalidasi semua bidang

    ' kode yang dibangkitkan oleh Visual Studio .NET

    ' menangani event cmdOK Click
    Private Sub cmdOK_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles cmdOK.Click

        ' memastikan tidak ada kotak-teks yang kosong
        If (txtTelp.Text = "" OrElse txtPost.Text = "" OrElse _
            txtPropinsi.Text = "" OrElse txtKota.Text = "" OrElse _
            txtAlamat.Text = "" OrElse txtPertama.Text = "" OrElse _
            txtAkhir.Text = "") Then

            ' menampilkan kotak teks
            MessageBox.Show("Silahkan isi semua bidang", "Error", _
            MessageBoxButtons.OK, MessageBoxIcon.Error)

            ' menetapkan fokus pada txtAkhir
            txtAkhir.Focus()

            Return
        End If

        ' jika nama format nama akhir tak-valid
        If Not Regex.Match(txtAkhir.Text, _
            "^[A-Z][a-zA-Z]*$").Success Then

            ' nama akhir tak-valid
            MessageBox.Show("Nama Akhir Tak-Valid", "Pesan")
                txtAkhir.Focus()

            Return
        End If

        ' jika format nama pertama tak-valid
        If Not Regex.Match(txtPertama.Text, _
           "^[A-Z][a-zA-Z]*$").Success Then

            ' nama pertama tak-valid
            MessageBox.Show("Nama Pertama Tak-Valid", "Pesan")
                txtPertama.Focus()

            Return
        End If

        ' jika format alamat tak-valid
        If Not Regex.Match(txtAlamat.Text, "^[0-9]+\s+([a-zA-Z]" & _
            "+|[a-zA-Z]+\s[a-zA-Z]+)$").Success Then

            ' alamat tak-valid
            MessageBox.Show("Alamat Tak-Valid", "Pesan")
                txtAlamat.Focus()

            Return
        End If

        ' jika format kota tak-valid
        If Not Regex.Match(txtKota.Text, "^([a-zA-Z]+|[a-zA-Z]" & _
            "+\s[a-zA-Z]+)$").Success Then

            ' kota tak-valid
            MessageBox.Show("Kota Tak-Valid", "Pesan")
                txtKota.Focus()

            Return
        End If

        ' jika format propinsi tak-valid
        If Not Regex.Match(txtPropinsi.Text, _
             "^([a-zA-Z]+|[a-zA-Z]+\s[a-zA-Z]+)$").Success Then

            ' propinsi tak-valid
            MessageBox.Show("Propinsi Tak-Valid", "Pesan")
            txtPropinsi.Focus()

            Return
        End If

        ' jika format kode pos tak-valid
        If Not Regex.Match(txtPost.Text, "^\d{5}$").Success Then

            ' kode pos tak-valid
            MessageBox.Show("Kode Pos Tak-Valid", "Pesan")
                txtPost.Focus()

            Return
        End If

        ' jika format no telp tak-valid
        If Not Regex.Match(txtTelp.Text, "^[1-9]" & _
            "\d{2}-[1-9]\d{2}-\d{4}$").Success Then

            ' telepon tak-valid
            MessageBox.Show("Nomor Telepon Tak-Valid", "Pesan")
                txtTelp.Focus()

            Return
        End If

        ' informasi valid, beritahu pengguna dan keluar aplikasi
        Me.Hide()
        MessageBox.Show("Terima-Kasih", "Informasi Benar", _
            MessageBoxButtons.OK, MessageBoxIcon.Information)

        Application.Exit()
    End Sub ' cmdOK_Click

End Class



Gambar 10.21 Keluaran program pada kode 10.20


Latihan
1.       Tulislah sebuah aplikasi yang menggunakan metode CompareTo untuk membandingkan dua String masukan oleh pengguna. Tampilkan apakah String pertama kurang dari, sama dengan, atau lebih dari String kedua.

2.       Tulislah sebuah aplikasi yang menggunakan pembangkitan bilangan-acak untuk menciptakan kalimat. Gunakan empat array String, yang dinamakan ketWaktu, kata-Benda, kataKerja, dan ketTempat. Ciptakan sebuah kalimat dengan memilih kata secara acak dari tiap array dengan urutan berikut: ketWaktu, kataBenda, kataKerja, ketTempat. Setelah tiap kata dipilih, kemudian semuanya disambung menjadi kalimat. Antar kata harus dipisahkan dengan koma. Ketika kalimat ditampilkan, ia harus dimulai dengan huruf besar dan diakhiri dengan sebuah titik. Program harus membangkitkan 20 kalimat dan menampilkannya di dalam TextBox.

Keempat array harus diisi sebagai berikut: array ketWaktu harus memuat “semalam”, “tadi pagi”, “nanti malam”, “bulan depan”, dan “besok”; array kataBenda harus memuat “wanita itu”, “pria ganteng berbaju merah”, “dosen galak ini”, “anak kecil”, dan “pria paru baya”; array kataKerja harus memuat “belajar”, “berlari”, “berjalan”, “melompat”, dan “menangis”; array ketTempat harus memuat “di rumah”, “di jalan”, “di warung”, “di hotel”, dan “di bioskop”.





1 comment:

  1. kurang kecil teks nya.. sakit mata gw lihat nya.. copz

    ReplyDelete