Tali delima


Objek rentetan dalam Ruby digunakan untuk menyimpan atau memanipulasi jujukan satu atau lebih bait.

Rentetan Ruby dibahagikan kepada rentetan petikan tunggal (') dan rentetan petikan berganda ("). Perbezaannya ialah rentetan petikan berganda boleh menyokong lebih banyak aksara melarikan diri.

Rentetan petikan tunggal

Rentetan yang paling mudah ialah rentetan petikan tunggal, iaitu simpan rentetan di dalam petikan tunggal:

'这是一个 Ruby 程序的字符串'

Jika anda perlu menggunakan aksara petikan tunggal dalam rentetan petikan tunggal, maka Anda perlu menggunakan garis serong ke belakang( ) dalam rentetan petikan tunggal supaya jurubahasa Ruby tidak menganggap bahawa aksara petikan tunggal ialah simbol penamat rentetan:

'Won\'t you read O\'Reilly\'s book?'

Sengkang ke belakang juga boleh melepaskan sengkang sengkang ke belakang yang lain supaya sengkang ke belakang kedua itu sendiri tidak ditafsirkan sebagai aksara melarikan diri. kurungan kerinting untuk mengira nilai ungkapan:

Pembolehubah terbenam dalam rentetan:

#!/usr/bin/ruby
# -*- coding: UTF-8 -*-

name1 = "Joe"
name2 = "Mary"
puts "你好 #{name1},  #{name2} 在哪?"

Keluaran contoh di atas ialah:

你好 Joe,  Mary 在哪?

Operasi matematik dalam rentetan:

#!/usr/bin/ruby
# -*- coding: UTF-8 -*-

x, y, z = 12, 36, 72
puts "x 的值为 #{ x }"
puts "x + y 的值为 #{ x + y }"
puts "x + y + z 的平均值为 #{ (x + y + z)/3 }"


Keluaran contoh di atas ialah Hasil keluaran ialah:

x 的值为 12
x + y 的值为 48
x + y + z 的平均值为 40

Ruby juga menyokong pembolehubah rentetan berpandukan %q dan %Q. %q menggunakan peraturan petikan tunggal, dan %Q ialah peraturan petikan berganda Yang berikut Kemudian satu lagi (! [ { Pembatas permulaan dsb. dan dan } ] ) Pembatas akhir dsb. <🎜. >

Aksara yang mengikuti q atau Q ialah pembatas Pembatas boleh menjadi mana-mana aksara bait tunggal bukan abjad penamat yang sepadan ditemui.

#!/usr/bin/ruby
# -*- coding: UTF-8 -*-

desc1 = %Q{Ruby 的字符串可以使用 '' 和 ""。}
desc2 = %q|Ruby 的字符串可以使用 '' 和 ""。|

puts desc1
puts desc2


Keluaran contoh di atas ialah:

Ruby 的字符串可以使用 '' 和 ""。
Ruby 的字符串可以使用 '' 和 ""。

Aksara melarikan diri

Subskrip

menyenaraikan pelarian aksara atau aksara bukan pencetakan yang boleh dilepaskan menggunakan simbol garis miring ke belakang


Nota:

Dalam rentetan yang disertakan dengan petikan berganda, aksara escape akan dihuraikan dalam rentetan yang disertakan dengan petikan tunggal , aksara melarikan diri tidak akan dihuraikan

反斜杠符号十六进制字符描述
a0x07报警符
b0x08退格键
cx Control-x
C-x Control-x
e0x1b转义符
f0x0c换页符
M-C-x Meta-Control-x
n0x0a换行符
nnn 八进制表示法,其中 n 的范围为 0.7
r0x0d回车符
s0x20空格符
t0x09制表符
v0x0b垂直制表符
x 字符 x
xnn 十六进制表示法,其中 n 的范围为 0.9、 a.f 或 A.F

Pengekodan Aksara

Set aksara lalai Ruby ialah ASCII dan aksara boleh diwakili oleh satu bait. Jika anda menggunakan UTF-8 atau set aksara moden yang lain, aksara mungkin diwakili oleh satu hingga empat bait.

Anda boleh menukar set aksara menggunakan $KCODE pada permulaan program anda, seperti ini:

$KCODE = 'u'

Berikut ialah nilai yang mungkin ​​untuk $KCODE.

编码描述
aASCII (与 none 相同)。这是默认的。
eEUC。
nNone (与 ASCII 相同)。
uUTF-8。

Kaedah terbina dalam rentetan

Kami memerlukan instance objek Rentetan untuk memanggil kaedah Rentetan. Begini cara untuk mencipta tika objek String:

new [String.new(str="")]

Ini akan mengembalikan objek String baharu yang mengandungi salinan str. Sekarang, menggunakan objek str, kita boleh memanggil mana-mana kaedah contoh yang tersedia. Contohnya:

#!/usr/bin/ruby

myStr = String.new("THIS IS TEST")
foo = myStr.downcase

puts "#{foo}"

Ini akan menghasilkan keputusan berikut:

this is test

Berikut ialah kaedah rentetan awam (dengan andaian str ialah objek Rentetan):

37str.index(subrentetan [, offset]) [atau]38str.insert(index, other_str)39str.inspect40str.intern [or] str.to_sym41str.length42str.ljust(integer, padstr=' ')43str.lstrip44str.lstrip!45str.match(pattern)46str.oct47str.replace(other_str)48str.terbalik
Nombor siriKaedah & Penerangan
1str % arg
Formatkan rentetan menggunakan spesifikasi format. Jika arg mengandungi lebih daripada satu penggantian, maka arg mestilah array. Untuk maklumat lanjut tentang spesifikasi format, lihat sprintf di bawah "Modul Kernel".
2str * integer
Mengembalikan rentetan baharu yang mengandungi strs integer. Dalam erti kata lain, str ialah masa integer berulang.
3str + other_str
Sambungkan other_str dengan str.
4str << obj
Menggabungkan objek kepada rentetan. Jika objek ialah nombor tetap Fixnum dalam julat 0.255, ia ditukar kepada aksara. Bandingkan ini dengan concat.
5str <=> other_str
Bandingkan str dengan other_str dan kembalikan -1 (kurang daripada), 0 ( sama dengan) atau 1 (lebih besar daripada). Perbandingan adalah sensitif huruf besar.
6str == obj
Menyemak kesamaan str dan obj. Mengembalikan false jika obj bukan rentetan, benar jika str <=>
7str =~ obj
Memadankan str mengikut obj pola ungkapan biasa. Mengembalikan kedudukan di mana perlawanan bermula, jika tidak mengembalikan palsu.
8
9 str.capitalize
Tukar rentetan kepada huruf besar untuk paparan.
10str.capitalize!
Sama seperti huruf besar, tetapi str ditukar dan dikembalikan.
11str.casecmp
Perbandingan rentetan tidak sensitif huruf.
12str.center
Pusat rentetan.
13str.chomp
Alih keluar pemisah rekod ($/) dari hujung rentetan, biasanya n. Jika tiada pemisah rekod, tiada tindakan diambil.
14str.chomp!
Sama seperti chomp, tetapi str ditukar dan dikembalikan.
15str.chop
Alih keluar aksara terakhir dalam str.
16str.chop!
Sama seperti chop, tetapi str ditukar dan dikembalikan.
17str.concat(other_str)
Sambungkan other_str ke str.
18str.count(str, ...)
Memberi satu atau lebih set aksara kiraan. Jika terdapat beberapa set aksara, persilangan set ini dikira.
19str.crypt(other_str)
Gunakan cincangan kriptografi sehala ke str. Hujah ialah rentetan dua aksara, setiap aksara dalam julat a.z, A.Z, 0.9, ., atau /.
20str.delete(other_str, ...)
Mengembalikan salinan str dengan semua aksara dalam persilangan argumen yang dialih keluar.
21str.delete!(other_str, ...)
Sama seperti padam, tetapi str akan berubah dan kembali .
22str.huruf kecil
Mengembalikan salinan str, dengan semua huruf besar digantikan dengan huruf kecil.
23str.downcase!
Sama seperti downcase, tetapi str akan ditukar dan dikembalikan.
24str.dump
Mengembalikan versi str dengan semua aksara bukan cetakan digantikan dengan simbol nnn dan semua Aksara khas telah melarikan diri.
25str.each(separator=$/) { |substr| block }
Gunakan parameter sebagai pemisah rekod ( The lalai ialah $/) delimited str, menghantar setiap subrentetan ke blok yang disediakan.
26str.each_bait { |fixnum| blok }
Lepaskan setiap bait str ke blok, dalam bait Perwakilan perpuluhan setiap bait dikembalikan.
27str.each_line(separator=$/) { |substr| block }
Gunakan parameter sebagai pemisah rekod ( The lalai ialah $/) delimited str, menghantar setiap subrentetan ke blok yang disediakan.
28str.kosong?
Mengembalikan benar jika str kosong (iaitu mempunyai panjang 0).
29str.eql?(other)
Jika dua rentetan mempunyai panjang dan kandungan yang sama, maka kedua-dua rentetan ini ialah sama rata.
30str.gsub(corak, penggantian) [atau]
str.gsub(corak) { |padanan|blok }

Mengembalikan salinan str, dengan semua kemunculan corak digantikan dengan nilai penggantian atau blok. corak biasanya merupakan ungkapan biasa Regexp; jika ia ialah String, tiada aksara meta ungkapan biasa ditafsirkan (iaitu, /d/ akan sepadan dengan digit, tetapi 'd' akan sepadan dengan garis miring ke belakang diikuti dengan 'd').
31str[fixnum] [atau] str[fixnum,fixnum] [atau] str[julat] [atau] str[regexp] [ atau] str[regexp, fixnum] [or] str[other_str]
Gunakan parameter berikut untuk merujuk str: jika parameter ialah satu Fixnum, maka pengekodan aksara fixnum dikembalikan jika parameter ialah dua Fixnum, kemudian satu daripada Subrentetan bermula dari offset (fixnum pertama) dan berakhir pada panjang (fixnum kedua jika parameter adalah julat, subrentetan dalam julat dikembalikan jika parameter regexp, bahagian daripada rentetan padanan dikembalikan ;Jika parameter regexp dengan fixnum, maka data padanan pada kedudukan fixnum akan dikembalikan jika parameter ialah other_str, maka subrentetan padanan other_str akan dikembalikan. Fixnum negatif bermula pada -1 dari hujung rentetan.
32str[fixnum] = fixnum [atau] str[fixnum] = new_str [atau] str[fixnum, fixnum] = new_str [atau ] str[julat] = aString [atau] str[regexp] =new_str [atau] str[regexp, fixnum] =new_str [atau] str[other_str] = new_str ]
Gantikan keseluruhan rentetan atau sebahagian daripada rentetan. Sinonim dengan slice!.
33str.gsub!(corak, penggantian) [atau] str.gsub!(corak) { |padan| blok }
Lakukan penggantian String#gsub dan kembalikan str. Jika tiada penggantian dilakukan, ia tidak akan kembali.
34str.hash
Mengembalikan cincang berdasarkan panjang dan kandungan rentetan.
35str.hex
Anggap watak utama str sebagai rentetan digit heksadesimal (simbol pilihan dan pilihan 0x), dan mengembalikan nombor yang sepadan. Mengembalikan sifar jika ralat berlaku.
36str.include? other_str [atau] str.include? kembali benar.
str.index(fixnum [, offset]) [atau ]str.index(regexp [, offset])

Mengembalikan indeks kejadian pertama subrentetan, aksara (fixnum) atau corak (regexp) yang diberikan dalam str. Mengembalikan nol jika tidak dijumpai. Jika hujah kedua dibekalkan, tentukan kedudukan dalam rentetan untuk memulakan carian.

Sisipkan other_str sebelum aksara pada indeks yang diberikan, ubah suai str. Indeks negatif dikira dari hujung rentetan dan dimasukkan selepas aksara yang diberikan. Tujuannya adalah untuk memasukkan rentetan bermula pada indeks yang diberikan.
Mengembalikan versi str yang boleh dicetak, dengan aksara khas yang terlepas.
Mengembalikan simbol yang sepadan dengan str, jika ia tidak wujud sebelum ini , Simbol dicipta.
Mengembalikan panjang str. Bandingkan dengan saiz.
Jika integer lebih besar daripada panjang str, panjang yang dikembalikan ialah Rentetan integer baharu, dijajar ke kiri dengan str dan berlapik dengan padstr. Jika tidak, str dikembalikan.
Mengembalikan salinan str dengan ruang hadapan dialih keluar.
Mengalih keluar ruang hadapan daripada str, atau mengembalikan sifar jika tiada perubahan.
Jika corak bukan ungkapan biasa, tukar corak kepada ungkapan biasa Regexp , dan kemudian memanggil kaedah pemadanannya pada str.
Anggap watak utama str sebagai rentetan digit perpuluhan (simbol pilihan) , dan kembalikan nombor yang sepadan. Jika penukaran gagal, 0 dikembalikan.
Gantikan kandungan dalam str dengan nilai yang sepadan dalam other_str.
Mengembalikan rentetan baharu yang merupakan susunan terbalik str.
49str.reverse!
Str terbalik, str akan berubah dan kembali.
50str.rindex(subrentetan [, fixnum]) [atau]
str.rindex(fixnum [, fixnum]) [atau ]
str.rindex(regexp [, fixnum])

Mengembalikan indeks kejadian terakhir subrentetan, aksara (fixnum) atau corak (regexp) yang diberikan dalam str. Mengembalikan nol jika tidak dijumpai. Jika hujah kedua dibekalkan, tentukan kedudukan dalam rentetan untuk menamatkan carian. Watak di luar titik ini tidak akan dipertimbangkan.
51str.rjust(integer, padstr=' ')
Jika integer lebih besar daripada panjang str, panjang yang dikembalikan ialah Rentetan integer baharu, dijajarkan ke kanan dengan str dan berlapik dengan padstr. Jika tidak, str dikembalikan.
52str.rstrip
Mengembalikan salinan str dengan ruang di belakang dialih keluar.
53str.rstrip!
Alih keluar ruang mengekor daripada str, atau kembalikan sifar jika tiada perubahan.
54str.scan(corak) [atau]
str.scan(corak) { |padan, ...|

Dua bentuk padanan corak (boleh menjadi ungkapan biasa Regexp atau rentetan Rentetan) untuk melintasi str. Untuk setiap perlawanan, keputusan dijana, yang ditambahkan pada tatasusunan keputusan atau dihantar ke blok. Jika corak tidak mengandungi kumpulan, setiap hasil individu terdiri daripada rentetan yang dipadankan, $&. Jika corak mengandungi kumpulan, setiap hasil individu ialah tatasusunan yang mengandungi entri untuk setiap kumpulan.
55str.slice(fixnum) [atau] str.slice(fixnum, fixnum) [atau]
str.slice(julat ) [atau] str.slice(regexp) [atau]
str.slice(regexp, fixnum) [atau] str.slice(other_str)
Lihat str[fixnum], dsb.
str.slice !(fixnum) [atau] str.slice!(fixnum, fixnum) [atau] str.slice!(julat) [atau] str.slice!(regexp) [atau] str.slice!(other_str)

Mengalih keluar bahagian yang ditentukan daripada str dan mengembalikan bahagian yang dipadamkan. Jika nilai berada di luar julat dan hujah dalam bentuk Fixnum, IndexError akan dihasilkan. Jika parameter dalam bentuk julat, RangeError akan dihasilkan Jika parameter dalam bentuk Regexp dan String, tindakan pelaksanaan akan diabaikan.
56str.split(pattern=$;, [had])

Berdasarkan pembatas, letakkan str Membahagikan kepada subrentetan dan mengembalikan tatasusunan subrentetan ini.

Jika corak ialah String, ia akan digunakan sebagai pembatas apabila membelah str. Jika corak ialah satu ruang putih, str dipisahkan berdasarkan ruang putih dan aksara ruang putih dan ruang putih berturut-turut diabaikan.

Jika corak ialah ungkapan biasa Regexp, str dipisahkan di mana corak sepadan. Apabila corak sepadan dengan rentetan panjang 1, str dibahagikan kepada aksara individu.

Jika parameter corak ditinggalkan, nilai $; Jika $; ialah nil (lalai), str dipisahkan pada ruang putih, seolah-olah `` ditentukan sebagai pembatas.

Jika parameter had ditinggalkan, medan nol mengekor akan ditindas. Jika had ialah nombor positif, sehingga bilangan medan itu dikembalikan (jika had ialah 1, keseluruhan rentetan dikembalikan sebagai satu-satunya entri dalam tatasusunan). Jika had ialah nombor negatif, bilangan medan yang dikembalikan adalah tidak terhad dan medan nol mengekori tidak ditindas.

57str.squeeze([other_str]*)
Buat rentetan daripada parameter other_str menggunakan prosedur yang diterangkan untuk String #count aksara Siri. Mengembalikan rentetan baharu di mana kejadian aksara yang sama dalam set digantikan dengan aksara tunggal. Jika tiada hujah diberikan, semua aksara yang sama digantikan dengan satu aksara.
58str.squeeze!([other_str]*)
Sama seperti squeeze, tetapi str akan berubah dan kembali, Returns tiada jika tiada perubahan.
59str.strip
Mengembalikan salinan str dengan ruang hadapan dan belakang dialih keluar.
60str.strip!
Alih keluar ruang hadapan dan belakang dari str dan kembali jika tiada perubahan.
61str.sub(corak, penggantian) [atau]
str.sub(corak) { |padanan|blok }

Mengembalikan salinan str. Kejadian pertama corak akan digantikan dengan nilai penggantian atau blok. corak biasanya merupakan ekspresi biasa Regexp; jika ia adalah String, tiada metakarakter ungkapan biasa ditafsirkan.
62str.sub!(corak, gantian) [atau]
str.sub!(corak) { |padanan|blok }

Lakukan penggantian String#sub dan str kembali Jika tiada penggantian dilakukan, tiada akan dikembalikan.
63str.succ [atau] str.next
Mengembalikan warisan str.
64str.succ! [atau] str.next!
bersamaan dengan String#succ, tetapi str akan berubah dan kembali.
65str.sum(n=16)
Mengembalikan n-bit checksum bagi aksara dalam str, di mana n Merupakan parameter Fixnum pilihan, lalai ialah 16. Hasilnya hanyalah jumlah nilai binari setiap aksara dalam str, modulo 2n - 1. Ini bukan checksum yang sangat baik.
66str.swapcase
Mengembalikan salinan str, dengan semua huruf besar ditukar kepada huruf kecil dan semua huruf kecil ditukar adalah huruf besar.
67str.swapcase!
bersamaan dengan String#swapcase, tetapi str akan berubah dan kembali, jika tiada tukar kemudian Return nol.
68str.to_f
Mengembalikan hasil tafsiran watak utama dalam str sebagai nombor titik terapung. Aksara tambahan melebihi penghujung digit yang sah diabaikan. Jika tiada digit yang sah pada permulaan str, 0.0 dikembalikan. Kaedah ini tidak menghasilkan pengecualian.
69str.to_i(base=10)
Mengembalikan aksara utama dalam str yang ditafsirkan sebagai asas integer (asas ialah 2, 8, 10 atau 16). Aksara tambahan melebihi penghujung digit yang sah diabaikan. Jika tiada digit yang sah pada permulaan str, 0 dikembalikan. Kaedah ini tidak menghasilkan pengecualian.
70str.to_s [or] str.to_str
Mengembalikan nilai yang diterima.
71str.tr(from_str, to_str)
Mengembalikan salinan str, menggantikan aksara dalam from_str dengan aksara yang sepadan dalam to_str. Jika to_str lebih pendek daripada from_str, ia dipadatkan kepada aksara terakhir. Kedua-dua rentetan boleh menggunakan tatatanda c1.c2 untuk mewakili julat aksara. Jika from_str bermula dengan ^, ini bermakna semua aksara kecuali yang disenaraikan.
72str.tr!(from_str, to_str)
Bersamaan dengan String#tr, tetapi str akan berubah dan kembali , pulangan sifar jika tiada perubahan.
73str.tr_s(from_str, to_str)
Proses str mengikut peraturan yang diterangkan oleh String#tr, dan kemudian bergerak Kecuali aksara berulang yang akan menjejaskan terjemahan.
74str.tr_s!(from_str, to_str)
Bersamaan dengan String#tr_s, tetapi str akan berubah dan kembali , pulangan sifar jika tiada perubahan.
75str.unpack(format)
Decode str (mungkin mengandungi data binari) mengikut rentetan format dan kembalikan tatasusunan yang diekstrak bagi setiap nilai. Watak format terdiri daripada satu siri arahan aksara tunggal. Setiap arahan boleh diikuti dengan nombor yang menunjukkan bilangan kali arahan itu diulang. Asterisk (*) akan menggunakan semua elemen yang tinggal. Arahan sSiIll, masing-masing mungkin diikuti dengan garis bawah (_), menggunakan saiz asli platform asas untuk jenis yang ditentukan, jika tidak gunakan saiz konsisten bebas platform. Ruang dalam rentetan format diabaikan.
76str.upcase
Mengembalikan salinan str, dengan semua huruf kecil digantikan dengan huruf besar. Operasi ini tidak sensitif konteks, hanya aksara a hingga z terjejas.
77str.upcase!
Tukar kandungan str kepada huruf besar, atau kembalikan sifar jika tiada perubahan.
78str.upto(other_str) { |s| blok }
Melintasi nilai berterusan, bermula dengan str dan berakhir dengan other_str Tamat (termasuk), menghantar setiap nilai ke blok secara bergilir-gilir. Kaedah String#succ digunakan untuk menjana setiap nilai.

Arahan unpack string

Jadual berikut menyenaraikan arahan unpack untuk kaedah String#unpack.

ArahanKembalikanPenerangan
AString Alih keluar nol dan ruang di belakang.
aStringString.
BStringMengekstrak bit daripada setiap aksara (bit yang paling ketara dahulu).
bStringMengekstrak bit daripada setiap aksara (bit paling tidak ketara dahulu).
CFixnumMengekstrak aksara sebagai integer tidak bertanda.
cFixnumMengekstrak aksara sebagai integer.
D, dApung menganggap saiz aksara (berganda) panjang sebagai ganda asli.
EApungAnggap saiz aksara (berganda) panjang sebagai dua dalam susunan bait littleendian.
eApungAnggap saiz aksara panjang(terapung) sebagai apungan dalam susunan bait littleendian.
F, fFloat menganggap saiz aksara(terapung) sebagai terapung asli.
GApungAnggap saiz aksara (berganda) panjang sebagai dua kali ganda dalam susunan bait rangkaian.
gApungAnggap saiz aksara panjang(terapung) sebagai apungan tertib bait rangkaian.
HStringMengekstrak heks daripada setiap aksara (bit yang paling ketara dahulu).
hStringMengekstrak heks daripada setiap aksara (sedikit paling ketara dahulu).
IIntegerAnggap aksara berturutan sizeof(int) panjang (diubah suai oleh _) sebagai integer asli.
iIntegerAnggap aksara berturutan sizeof(int) panjang (diubah suai oleh _) sebagai integer asli yang ditandatangani.
LIntegerAnggap empat aksara berturut-turut (diubah suai oleh _) sebagai integer panjang asli yang tidak ditandatangani.
lIntegerAnggap empat aksara berturut-turut (diubah suai oleh _) sebagai integer panjang asli yang ditandatangani.
MStringSebut harga boleh dicetak.
mStringPengekodan Base64.
NInteger merawat empat aksara sebagai susunan bait rangkaian yang tidak ditandatangani.
nFixnumAnggap dua aksara sebagai tertib bait rangkaian pendek yang tidak ditandatangani.
PString memperlakukan aksara sizeof(char *) sebagai penunjuk dan mengembalikan aksara emph{len} dari kedudukan yang dirujuk .
pString memperlakukan sizeof(char *) characters sebagai penunjuk kepada aksara yang ditamatkan nol.
QIntegerAnggap lapan aksara sebagai perkataan quad tidak bertanda (64 bit).
qIntegerAnggap lapan aksara sebagai perkataan quad bertanda (64 bit).
SFixnumAnggap dua (berbeza jika _ digunakan) aksara berturut-turut sebagai tertib bait asli yang tidak ditandatangani.
sFixnumAnggap dua (berbeza jika _ digunakan) aksara berturut-turut sebagai pendek yang ditandatangani dalam susunan bait asli.
UIntegerAksara UTF-8 sebagai integer tidak bertanda.
uStringPengekodan UU.
VFixnumAnggap empat aksara sebagai panjang yang tidak ditandatangani dalam susunan bait kecil-endian.
vFixnumAnggap dua aksara sebagai pendek yang tidak ditandatangani dalam susunan bait kecil-endian.
wIntegerBER integer mampat.
X Langkau satu aksara ke belakang.
x Langkau ke hadapan satu aksara.
ZString Digunakan bersama-sama dengan *, keluarkan nol mengekor sehingga nol pertama.
@ Melangkau offset yang diberikan oleh parameter panjang.

Contoh

Cuba contoh berikut untuk menyahmampat pelbagai data.

rreeee