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.

matlab
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:

text
s : class string, size 1x1
c : class char, size 1x6
strlength(s) : 6, length(s) : 1
length(c)    : 6

Mari kita bedah baris-baris kode di atas:

  1. Baris 1-2 ("MATLAB" vs 'MATLAB'): tanda kutip ganda melahirkan string skalar 1×1; tanda kutip tunggal melahirkan array enam karakter.
  2. Baris 5 (strlength(s) vs length(s)): strlength menghitung karakter di dalam setiap elemen string (6), sedangkan length menghitung dimensi array-nya (1 elemen). Pada char, keduanya sama-sama 6 — angka length yang berbeda inilah sumber kejutan klasik.
  3. 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.

matlab
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:

text
buah : class string, size 3x1
strlength buah : 4 5 6
buah(2) = jeruk (class string)
strcat : Halo, dunia (class string)
operator + : Sepuluh ribu

Mari kita bedah baris-baris kode di atas:

  1. Baris 1 (["apel"; ...]): titik koma menyusun string 3×1 — buah(2) menghasilkan string skalar "jeruk", bukan karakter.
  2. Baris 2 (strlength(buah)): panjang tiap teks dihitung serentak — [4 5 6], padanan numel pada array numerik.
  3. Baris 7-8 (strcat dan +): strcat menggabungkan argumen teks; + pada string berarti penyambungan. Hasilnya mengikuti tipe tertinggi: satu input string saja sudah menjadikan hasil string.

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.

matlab
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:

text
contains "is"  : 0 0 1
startsWith "a" : 1 0 0

Mari kita bedah hasil tersebut:

  1. contains(buah, "is"): hanya "pisang" memuat substring "is" — mask [0 0 1] siap memfilter buah(TF).
  2. startsWith(buah, "a"): hanya "apel" berawalan "a" — mask [1 0 0].
  3. 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.

matlab
alamat = ["Jl. Merdeka No. 10, Bandung 40115"; ...
          "Jl. Sudirman No. 7, Jakarta 12190"];
angka = extract(alamat, digitsPattern)

Output yang Dihasilkan:

text
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.

matlab
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:

text
jumlah kata : 3, kata pertama : MATLAB
join : MATLAB-itu-mudah

split("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:

matlab
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:

text
dariChar : class string
keChar   : class char
sprintf  : class char

Aturan 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.