8. String Builder
Sebuah
objek StringBuilder bukan string melainkan obyek pembantu yang digunakan untuk
memanipulasi karakter. Ini berisi buffer, biasanya diinisialisasi dengan string
tetapi biasanya lebih besar dari string tersebut. Penyangga ini dapat
dimanipulasi di tempat tanpa membuat string baru. Kita dapat menyisipkan,
menambahkan, menghapus, dan mengganti karakter. Setelah selesai memanipulasi
karakter, gunakan metode ToString StringBuilder untuk mengekstrak string
jadi itu.
Kedua
String dan StringBuilder berisi karakter Unicode jenis Char dan mendukung
pengindeks yang mengembalikan Char. Karena kelas String adalah kekal,
pengindeks adalah read-only, tetapi pengindeks StringBuilder dibaca / ditulisi.
Listing 20.38 menggambarkan bagaimana memanipulasi karakter dengan kelas
StringBuilder dan kemudian menempatkan karakter menjadi objek String.
Listing 20.38: StringBuilder Class Manipulation
using System;
using
System.Collections.Generic;
using System.Linq;
using System.Text;
namespace
StringBuilderClass
{
class Program
{
static void Main(string[] args)
{
String MyName;
StringBuilder MyOtherName = new
StringBuilder("Hello");
MyOtherName.Remove(2, 3); // produces "He"
MyOtherName.Insert(2, "lp"); // produces
"Help"
MyOtherName.Replace('l', 'a'); // produces
"Heap"
MyName = MyOtherName.ToString();
}
}
}
Kita
dapat menggunakan salah satu yaitu String atau StringBuilder untuk operasi
string. Jika kita mengubah string operasi, seperti pemindahan, menambahkan,
menghapus, dan mengganti beberapa karakter kita harus memilih kelas
StringBuilder.
Kita
dapat menggunakan String dan kelas StringBuilder setiap kali diperlukan dan
juga menulis fungsi penolong untuk kedua kelas dengan menyediakan fungsi
pembantu statis.
Misalnya,
setiap kali kita mengubah string di kelas String, metode dari kelas String
mengembalikan sebuah string baru sebagai hasilnya. Membuat banyak objek String
mungkin menurunkan kinerja program kita. Kita
dapat menghindari membuat contoh baru dari string dengan menggunakan
kelas StringBuilder.
Katakanlah
kita ingin menggabungkan dua string. Berikut adalah cara tradisional
menggunakan kelas System.String:
String str1 = "I like";
String str2 = "Sepakbola";
String strConcat = String.Concat
(str1, str2);
Nilai strConcat adalah saya seperti
Soccer. Kita dapat menggunakan kelas StringBuilder dan metode Append untuk
melakukan hal yang sama:
StringBuilder
MyStrBuilder = new StringBuilder ("I like");
String
newstr = "Sepakbola";
MyStrBuilder.Append
(newstr);
Nilai MyStrBuilder adalah saya seperti
Soccer. Kita dapat menggunakan String dan kelas StringBuilder setiap kali
diperlukan dan juga menulis fungsi penolong untuk kedua kelas dengan
menyediakan fungsi pembantu statis.
Sebagai
contoh, secara default StringBuilder tidak menyediakan fungsi anggota IndexOf,
yang melakukan pencarian linear untuk karakter dalam sebuah string. Tapi
Listing 20.39 menunjukkan bagaimana kita dapat membuat fungsi IndexOf kustom
kita sendiri.
Listing
20.39: StringBuilder IndexOf
Listing 20.39: StringBuilder IndexOf
// Example IndexOf
function for StringBuilder class
using System;
using System.Text;
public class App
{
public
static int sbIndexOf(StringBuilder sb, char ch)
{
Int32 intVal1 = -1;
while (++intVal1 < sb.Length)
{
if (sb[intVal1] == ch)
{
return intVal1;
}
}
return -1;
}
//
string is an alias for System.String in the .NET Framework.
public static void Main(string[] args)
{
StringBuilder sb1 = new StringBuilder(@"Hello There");
Console.Write("{0}", App.sbIndexOf(sb1, 'o'));
}
}
Mari
kita lihat perbedaan halus antara String dan StringBuilder bila dilewatkan ke
fungsi API Win32 yang mengambil string. GetWindowText, didefinisikan dalam
Windows.h. LpString, menunjuk ke sebuah penyangga ukuran nMaxCount. Itu
berarti, sebelum memanggil GetWindowText, kita diharapkan untuk mengalokasikan
buffer untuk pointer karakter nMaxCount:
HWND hWnd, // handle to window or control
LPTStr lpString, // text buffer
int nMaxCount // maximum number of characters to
copy
Sebuah
karakter buffer berubah panjang tetap harus melewati kode unmanaged sejak
LPTSTR adalah pointer ke karakter (itu adalah baik char * atau * wchar,
tergantung pada pilihan kompilasi kode, ANSI atau Unicode). Cukup melewati
string tidak bekerja dalam kasus ini karena GetWindowText tidak dapat
memodifikasi isi dari buffer berlalu. Bahkan jika string dikirimkan dengan
referensi, GetWindowText tidak dapat menginisialisasi buffer untuk ukuran
tertentu.
Solusi
dalam hal ini adalah untuk lulus StringBuilder sebagai argumen di tempat String
sejak contoh StringBuilder dapat dimodifikasi oleh GetWindowText. Perlu diingat
bahwa contoh StringBuilder tidak boleh melebihi kapasitas StringBuilder.
StringBuilder akan diinisialisasi dengan panjang tetap sebelum menelepon
GetWindowText. Jika Anda menginisialisasi StringBuilder dengan kapasitas N,
kode unmanaged marshaler menggunakan penyangga ukuran (N 1) karakter.
StringBuilder tidak memiliki nol terminator, sedangkan unmanaged tali pointer
tidak.
Setelah
dibuat string tidak dapat diubah. StringBuilder A dapat diubah sebanyak yang
diperlukan. Ini menghasilkan peningkatan kinerja yang mengagumkan. Ini
menghilangkan jutaan eksemplar string. Dan dalam loop tertentu adalah penting.
Contoh :
Sebagai
pendahuluan, program ini menunjukkan bagaimana jenis StringBuilder digunakan
untuk membangun buffer yang lebih besar karakter. Anda dapat memanggil metode
Append pada contoh StringBuilder untuk menambahkan lebih banyak data.
Program yang menggunakan StringBuilder:
C #
using System;
menggunakan System.Text;
Program kelas
{
static void
Main ()
{
StringBuilder builder = new
StringBuilder ();
/ / Tambahkan ke StringBuilder.
for (int i = 0; i <10; i + +)
{
builder.Append (i) Append
("");.
}
Console.WriteLine (builder);
}
}
Keluaran :
0 1 2 3 4 5 6 7 8 9
http://www.c-sharpcorner.com/UploadFile/puranindia/stringbuilder-class-in-C-Sharp/
http://www.dotnetperls.com/stringbuilder
Tidak ada komentar:
Posting Komentar