Chapter Character dan String di Section Dasar telah memperkenalkan dua tanda kutip: 'MATLAB' (char) dan "MATLAB" (string), dengan fokus pada char. Pendalaman ini membalik timbangan: sejak R2016b, string adalah tipe teks utama MATLAB — teks diperlakukan sebagai data massal yang bisa diiris, dijumlahkan, dan difilter seperti array numerik. Fungsi-fungsi modern (replace, contains, extract, split, join) bekerja pada ribuan teks sekaligus tanpa loop. Chapter ini membedah perbedaan keduanya lalu membangun seluruh perangkat string array.
“teks” vs ’teks’: Dua Kelas, Dua Cara Berpikir #
Aturannya: char adalah array karakter 'MATLAB' (kelas char, ukuran 1×6), sedangkan string adalah kelas tersendiri "MATLAB" (kelas string, ukuran 1×1) yang menampung teks utuh dalam satu elemen. Mekanismenya: elemen string menyimpan teks sebagai satu nilai — bukan deretan kode ASCII — sehingga “banyak baris teks” menjadi “array string” berukuran N×1, bukan matriks karakter.
s = "MATLAB";
c = 'MATLAB';
fprintf('s : class %s, size %dx%d\n', class(s), size(s,1), size(s,2));
fprintf('c : class %s, size %dx%d\n', class(c), size(c,1), size(c,2));
fprintf('strlength(s) : %d, length(s) : %d\n', strlength(s), length(s));
fprintf('length(c) : %d\n', length(c));Output yang Dihasilkan:
s : class string, size 1x1
c : class char, size 1x6
strlength(s) : 6, length(s) : 1
length(c) : 6Mari kita bedah baris-baris kode di atas:
- Baris 1-2 (
"MATLAB"vs'MATLAB'): tanda kutip ganda melahirkan string skalar 1×1; tanda kutip tunggal melahirkan array enam karakter. - Baris 5 (
strlength(s)vslength(s)):strlengthmenghitung karakter di dalam setiap elemen string (6), sedangkanlengthmenghitung dimensi array-nya (1 elemen). Padachar, keduanya sama-sama 6 — angkalengthyang berbeda inilah sumber kejutan klasik. - Konsekuensi praktisnya:
["MATLAB"; "Octave"]sah (string 2×1) meski teksnya beda panjang;['MATLAB'; 'Octave']juga sah karena char 1×6 dan 1×6 kebetulan sama panjang, tetapi['MATLAB'; 'Octav']gagal — matriks karakter menuntut kolom seragam.
Membuat dan Mengoperasikan String Array #
Aturannya: kurung siku menggabungkan string menjadi array, indexing memakai (), dan penggabungan teks memakai strcat, operator +, atau append. Mekanismenya: operasi per elemen bekerja vektorisasi — strlength pada array 3×1 menghasilkan vektor 3×1 tanpa loop.
buah = ["apel"; "jeruk"; "pisang"];
L = strlength(buah);
fprintf('buah : class %s, size %dx%d\n', class(buah), size(buah,1), size(buah,2));
fprintf('strlength buah : %d %d %d\n', L);
fprintf('buah(2) = %s (class %s)\n', buah(2), class(buah(2)));
sapa = strcat("Halo", ", ", "dunia");
fprintf('strcat : %s (class %s)\n', sapa, class(sapa));
jumlah = "Sepuluh" + " " + "ribu";
fprintf('operator + : %s\n', jumlah);Output yang Dihasilkan:
buah : class string, size 3x1
strlength buah : 4 5 6
buah(2) = jeruk (class string)
strcat : Halo, dunia (class string)
operator + : Sepuluh ribuMari kita bedah baris-baris kode di atas:
- Baris 1 (
["apel"; ...]): titik koma menyusun string 3×1 —buah(2)menghasilkan string skalar"jeruk", bukan karakter. - Baris 2 (
strlength(buah)): panjang tiap teks dihitung serentak —[4 5 6], padanannumelpada array numerik. - Baris 7-8 (
strcatdan+):strcatmenggabungkan argumen teks;+pada string berarti penyambungan. Hasilnya mengikuti tipe tertinggi: satu input string saja sudah menjadikan hasilstring.
replace, contains, startsWith: Penyaring Teks Massal #
Aturannya: fungsi-fungsi modern menerima string array dan memproses setiap elemen — replace menyalin dengan substitusi, contains dan startsWith menghasilkan mask logical. Mekanismenya: kembalian berbentuk array berukuran sama dengan input, sehingga hasilnya langsung dipakai sebagai indeks — persis pola logical indexing dari Section Array dan Matriks.
TF = contains(buah, "is");
fprintf('contains "is" : %d %d %d\n', TF);
TF2 = startsWith(buah, "a");
fprintf('startsWith "a" : %d %d %d\n', TF2);
slogan = "kopi pagi, kopi sore";
baru = replace(slogan, "kopi", "teh");
fprintf('replace : %s\n', baru);Output yang Dihasilkan:
contains "is" : 0 0 1
startsWith "a" : 1 0 0Mari kita bedah hasil tersebut:
contains(buah, "is"): hanya"pisang"memuat substring"is"— mask[0 0 1]siap memfilterbuah(TF).startsWith(buah, "a"): hanya"apel"berawalan"a"— mask[1 0 0].replace(slogan, "kopi", "teh"): kedua kemunculan diganti sekaligus, menghasilkan"teh pagi, teh sore"— penggantian menyasar semua temuan, bukan yang pertama saja.
Padanan lama dari chapter Dasar (strfind, perbandingan ==) tetap bekerja, tetapi versi modern ini membaca sebagai kalimat: buah(contains(buah, "is")) langsung dimengerti tanpa komentar.
extract dengan Pattern #
Aturannya: extract(str, pat) mengeluarkan setiap substring yang cocok dengan pattern — deskripsi bentuk teks, bukan teks literal. Mekanismenya: pattern seperti digitsPattern (R2020b) mencocokkan “deretan digit apa pun” pada setiap elemen string; hasilnya adalah string array berisi seluruh temuan.
alamat = ["Jl. Merdeka No. 10, Bandung 40115"; ...
"Jl. Sudirman No. 7, Jakarta 12190"];
angka = extract(alamat, digitsPattern)Output yang Dihasilkan:
angka =
4×1 string
"10"
"40115"
"7"
"12190"Dari dua baris alamat, empat deretan angka tertangkap: nomor rumah dan kode pos. Pattern dikombinasikan secara bebas — digitsPattern + "," mencocokkan digit yang diikuti koma; keluarga lengkapnya (lettersPattern, whitespacePattern, dan sejumlah fungsi penyusun) dibahas di dokumentasi pattern. Teks hasil extract berupa string sehingga konversi str2double(angka) mengembalikannya ke angka untuk dihitung.
split dan join: Memecah dan Menyusun #
Aturannya: split(str, pemisah) memecah teks pada tiap kemunculan pemisah; join(arrayStr, pemisah) menyusunnya kembali. Mekanismenya: keduanya bekerja per elemen pada array string — memecah seribu kalimat menghasilkan struktur konsisten tanpa loop.
kata = split("MATLAB itu mudah");
fprintf('jumlah kata : %d, kata pertama : %s\n', numel(kata), kata(1));
gabungan = join(kata, "-");
fprintf('join : %s\n', gabungan);Output yang Dihasilkan:
jumlah kata : 3, kata pertama : MATLAB
join : MATLAB-itu-mudahsplit("MATLAB itu mudah") tanpa pemisah memakai spasi sebagai batas bawaan — hasilnya string 3×1; join(kata, "-") merangkainya dengan tanda hubung. Pasangan ini menjadi tulang punggung pengolahan teks: parsing berkas log, kolom nama, hingga format CSV.
Kompatibilitas dengan char #
Dunia lama tidak hilang: sprintf menghasilkan char, berkas lama menyimpan cell of char, dan fungsi lawas menuntut 'teks'. Konversinya dua arah:
dariChar = string('teks lama'); % char -> string
keChar = char("teks baru"); % string -> char
formatStr = sprintf('nilai %d', 42); % sprintf hasilnya char
fprintf('dariChar : class %s\n', class(dariChar));
fprintf('keChar : class %s\n', class(keChar));
fprintf('sprintf : class %s\n', class(formatStr));Output yang Dihasilkan:
dariChar : class string
keChar : class char
sprintf : class charAturan praktisnya: simpan teks sebagai string di data (kolom table, label, hasil baca berkas), lalu konversi ke char hanya di batas fungsi lawas yang menuntutnya. string(cellOfChar) mengonversi seluruh isi cell array sekaligus — jembatan yang akan sering kita pakai di chapter Table.
Ringkasan #
"teks" adalah kelas string yang tiap elemennya menampung teks utuh, sedangkan 'teks' adalah array char — strlength mengukur isi string, length mengukur array-nya. Kurung siku menyusun string array, strcat/+/append menggabungkan, replace/contains/startsWith mengolah massal, extract + pattern menambang substring, dan split/join memecah-menyusun teks. Konversi string()/char() menjaga kompatibilitas dengan dunia lawas. Berkas contoh.m merangkai seluruh operasi dalam satu skrip MATLAB.