Minggu, 19 Mei 2013



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