Pemrograman Berorientasi Obyek Lanjut (IT251) Ramos Somya String adalah deretan dari karakter. Pada Java String merupakan sebuah object. Java menyediakan class String, StringBuffer dan StringTokenizer untuk menyimpan dan memroses string. +String() +String(value: String) +String(value: char[]) +charAt(index: int): char +compareTo(anotherString: String): int +compareToIgnoreCase(anotherString: String): int +concat(anotherString: String): String +endsWith(suffix: String): boolean +equals(anotherString: String): boolean +equalsIgnoreCase(anotherString: String): boolean +indexOf(ch: int): int +indexOf(ch: int, fromIndex: int): int +indexOf(str: String): int +indexOf(str: String, fromIndex: int): int +intern(): String +regionMatches(toffset: int, other: String, offset: int, len: int): boolean +length(): int +replace(oldChar: char, newChar: char): String +startsWith(prefix: String): boolean +subString(beginIndex: int): String +subString(beginIndex: int, endIndex: int): String +toCharArray(): char[] +toLowerCase(): String +toString(): String +toUpperCase(): String +trim(): String +copyValueOf(data: char[]): String +valueOf(c: char): String +valueOf(data: char[]): String +valueOf(d: double): String +valueOf(f: float): String +valueOf(i: int): String +valueOf(l: long): String String merupakan object yang dienkapsulasi dalam class String (java.lang.String). Parameter yang digunakan pada method println(String s) merupakan string literal. Compiler Java mengubah string literal menjadi sebuah object string dan meneruskannya kepada println. Operasi-operasi dalam String: - Membuat dan menginisialisasi String - Membandingkan String - Menggabungkan String - Mengakses karakter pada String String dapat dibuat dari sebuah nilai String atau sebuah array dari karakter. Deklarasi pembuatan String dari sebuah String literal menggunakan sintak: String string1 = new String(stringLiteral); Argumen stringLiteral merupakan deretan karakter yang diapit oleh tanda petik ganda (“…”). Misal untuk membuat sebuah object String bernama pesan untuk string literal “Belajar Java!”: String pesan = new String(“Belajar Java!”); Atau notasi shorthand untuk membuat string: String pesan = “Belajar Java!”; String juga dapat dibuat dari array karakter. char[] charArray = {‘B’, ‘e’, ‘l’, ‘a’, ‘j’, ‘a’, ‘r’, ‘ ’,’J’, ‘a’, ‘v’, ‘a’}; String pesan = new String(charArray); Kita mendapatkan panjang dari sebuah string dengan memanggil method length(). Misalnya, pesan.length() menghasilkan panjang dari string pesan. Method s.charAt(index) dapat digunakan untuk mendapatkan karakter tertentu pada string s, dimana index bernilai dari 0 sampai s.length()-1. Berdasar contoh sebelumnya pemanggilan method pesan.charAt(0) mengembalikan sebuah karakter ’B’ dan pesan.charAt(10) menghasilkan ’v’. Sedangkan pesan.length() bernilai 12. Method concat() digunakan untuk menggabungkan dua string: String s3 = s1.concat(s2); Java juga menyediakan cara yang mudah untuk menggabungkan string dengan menggunakan tanda tambah (+), misal: String s4 = pesan + “ dan “ + “HTML!”; Maka string s4 berisi “Belajar Java dan HTML!”. Apabila kita menggunakan tanda tambah (+) untuk menggabungkan sebuah angka dengan string pada method println, maka angka tersebut dikonversi menjadi string terlebih dahulu sebelum digabungkan. String merupakan class yang immutable (tidak dapat berubah). Setelah sebuah string tercipta, maka nilainya tidak dapat dimodifikasi. Misalnya, kita tidak dapat mengganti “Java” pada pesan menjadi “HTML”. Jadi yang dapat kita lakukan jika kita ingin mengubah string pesan dengan memberikan nilai baru kepada pesan: Pesan = “Belajar HTML”; Sebagai alternatif, kita dapat mengutip substring dari sebuah string menggunakan method substring pada kelas String yang mempunyai 2 versi: public String substring(int beginIndex, int endIndex) Menghasilkan sebuah string baru yang merupakan substring dari string tersebut. Substring dimulai pada beginIndex yang ditentukan dan berakhir pada karakter pada endIndex-1. Maka panjang dari substring adalah endIndex-beginIndex. Misalnya: String pesan = “Belajar Java”.substring(0,8) + “HTML”; public String substring(int beginIndex) Menghasilkan sebuah string baru yang merupakan substring dari string tersebut. Substring dimulai pada beginIndex yang ditentukan hingga akhir dari string. Operator == hanya akan mengecek apakah string1 dan string2 menunjuk kepada obyek yang sama; namun tidak akan memberitahu apakah string1 dan string2 mempunyai isi yang sama, meskipun berbeda object. Method equals() digunakan untuk membandingkan kesamaan isi dari object. Misalnya, kita membandingkan isi kedua string: Method compareTo() juga dapat digunakan untuk membandingkan dua buah string: s1.compareTo(s2); Method compareTo() akan menghasilkan nilai 0 jika s1 sama dengan s2, dan akan bernilai kurang dari 0 apabila s1 secara leksikograpikal kurang dari s2 dan bernilai lebih dari 0 apabila s1 secara leksikograpikal lebih dari s2. Class String juga menyediakan method equalsIgnoreCase() yang mengabaikan perbedaan huruf besar atau kecil saat membandingkan string dan regionMatches() untuk membandingkan bagian / potongan dari dua string. Kita juga dapat menggunakan str.startsWith(prefix) untuk mengecek apakah string str dimulai dengan prefix tertentu dan str.endsWith(suffix) untuk mengecek apakah string str diakhiri dengan sufix tertentu. String dapat dikonversi menjadi string yang baru dengan method toLowerCase menjadi huruf kecil semua, toUpperCase menjadi huruf besar semua, trim menghilangkan karakter blank pada akhir kedua string dan replace(oldChar, newChar) yang mengganti sebuah karakter pada string dengan karakter baru yang ditentukan. Untuk menemukan sebuah karakter atau substring pada sebuah string digunakan method indexOf. Empat jenis overloading pada method indexOf didefinisikan untuk kelas String: public int indexOf(int ch) Menghasilkan index dari karakter pertama pada string yang sesuai dengan karakter yang ditentukan pada ch. Akan bernilai -1 jika karakter yang dicari tidak ditemukan pada string. public int indexOf(int ch, int fromIndex) Menghasilkan index dari karakter pertama dalam string dimulai dari karakter pada fromIndex yang sesuai dengan karakter yang ditentukan pada ch. Akan bernilai -1 jika karakter yang dicari tidak ditemukan pada string. public int indexOf(String str) Menghasilkan index dari karakter pertama dari substring pada string yang sesuai, yang ditentukan pada str. Akan bernilai -1 jika karakter yang dicari tidak ditemukan pada string. public int indexOf(String str, int fromIndex) Menghasilkan index dari karakter pertama dari substring dalam string dimulai dari karakter pada fromIndex yang sesuai dengan string yang ditentukan pada str. Akan bernilai -1 jika karakter yang dicari tidak ditemukan pada string. Contoh: String bukan array, tetapi string dapat diubah menjadi sebuah array dan sebaliknya. Untuk mengkonversi sebuah string menjadi array dari karakter digunakan method toCharArray. Misalnya, pernyataan berikut mengubah string ‘Java’ menjadi array: char[] charArray = “Java”.toCharArray(); Maka charArray[0] adalah ‘J’ dan charArray[3] adalah ‘a’. Untuk mengkonversi array dari karakter menjadi sebuah string dapat menggunakan konstruktor String(char[]) atau method valueOf(char[]). String str = new String(new char[]{‘J’, ‘a’, ‘v’, ‘a’}); String str = String.valueOf(new char[]{‘J’, ‘a’, ‘v’, ‘a’}); Method valueOf dapat digunakan untuk mengkonversi array dari karakter menjadi sebuah string. Terdapat beberapa versi overloading dari method valueOf yang dapat dipakai untuk mengkonversi karakter dan angka menjadi string, dengan tipe argumen yang berbeda-beda: char, double, long, int dan float. Misalnya, untuk mengubah sebuah nilai double menjadi string dipakai String.valueOf(5.44) yang menghasilkan sebuah string yang berisi karakter-karakter ‘5’, ’.’, ’4’ dan ’4’. Dan sebaliknya untuk mengubah sebuah string numerik menjadi angka dipakai Double.parseDouble(str) atau Int.parseInt(str) menghasilkan nilai double atau int. Java menyediakan sebuah class pembungkus untuk setiap tipe data primitif. Kelas-kelas tersebut ialah Character, Boolean, Byte, Short, Integer, Long, Float, dan Double untuk char, boolean, byte, short, int, long, float, dan double. Semua class tersebut berada di package java.lang dan menjadikan nilai data primitif dapat diperlakukan sebagai object. Class Character mempunyai sebuah constructor dan lebih dari 30 method untuk memanipulasi sebuah karakter. +Character(value: char) +charValue(): char +compareTo(anotherCharacter: Character): int +equals(anotherCharacter: Character): boolean +isDigit(ch: char): boolean +isLetter(ch: char): boolean +isLetterOrDigit(ch: char): boolean +isLowerCase(ch: char): boolean +isUpperCase(ch: char): boolean +toLowerCase(ch: char): char +toUpperCase(ch: char): char Object Character dapat dibuat dari sebuah nilai char, misalnya: Character character = new Character(‘a’); Kebanyakan method pada class Character adalah static method. Method isDigit(char ch) bernilai true jika karakternya sebuah angka. Method isLetter(charch) bernilai true jika karakternya sebuah huruf. Method isLetterorDigit(char ch) bernilai true jika karakternya sebuah huruf atau angka. Method isLowerCase(char ch) bernilai true jika karakternya berhuruf kecil. Method isUpperCase(char ch) bernilai true jika karakternya berhuruf besar. Method toLowerCase(char ch) menghasilkan karakter berhuruf kecil, dan Method toUpperCase(char ch) menghasilkan karakter berhuruf besar. Class StringBuffer merupakan alternatif dari class String. StringBuffer lebih fleksibel daripada String. Kita dapat menambahkan, menyisipkan dan membubuhkan isi baru terhadap sebuah buffer string, dibandingkan dengan nilai string yang selalu tetap ketika dibuat. Class StringBuffer menyediakan 3 buah constructor: public StringBuffer() Membuat sebuah buffer string kosong (tidak ada karakter di dalamnya) dan kapasitas awal 16 karakter. public StringBuffer(int length) Membuat sebuah buffer string kosong (tidak ada karakter di dalamnya) dan kapasitas awal ditentukan pada argumen length. public StringBuffer(String string) Membuat sebuah buffer string untuk argumen string dan kapasitas awal 16 karakter ditambah dengan panjang dari argumen string tersebut. Class StringBuffer mempunyai lebih dari 30 method untuk mengelola buffer dan memodifikasi string pada buffer: +append(data: char[]): StringBuffer +append(data: char[], offset: int, len: int): StringBuffer +append(v: aPrimitiveType): StringBuffer +append(str: String): StringBuffer +capacity(): int +charAt(index: int): char +delete(startIndex: int, endIndex: int): StringBuffer +deleteCharAt(index: int): StringBuffer +insert(index: int, data: char[], offset: int, len: int): StringBuffer +insert(offset: int, data: char[]): StringBuffer +insert(offset: int, b: aPrimitiveType): StringBuffer +insert(offset: int, str: String): StringBuffer +length(): int +replace(startIndex: int, endIndex: int, str: String): StringBuffer +reverse(): StringBuffer +setCharAt(index: int, ch: char): void +setLength(newLength: int): void +subString(start: int): StringBuffer +subString(start: int, end: int): StringBuffer Class StringBuffer menyediakan beberapa method yang dioverloading untuk membubuhkan boolean, char, char array, double, float, int, long dan String pada sebuah buffer string. StringBuffer strBuf = new StringBuffer(); strBuf.append(“Belajar”); strBuf.append(“ ”); strBuf.append(“Java”); Untuk menyisipkan string baru dapat dipakai: strBuf.insert(8, “HTML dan ”); Maka strBuf berisi “Belajar HTML dan Java”. Class lain yang berguna untuk pemrosesan string ialah java.util.StringTokenizer. Class ini dipakai untuk membagi string menjadi potonganpotongan sehingga informasi yang terkandung dapat diterima kembali dan diproses. Misalnya, untuk mendapatkan semua kata pada string “Saya senang belajar Java di FTI”, kita dapat membuat sebuah instansiasi dari kelas StringTokenizer untuk string tersebut dan mendapatkan setiap kata pada string itu menggunakan method pada kelas StringTokenizer. +countTokens(): int +hasMoreTokens(): boolean +nextToken(): String +nextTokens(delim: String): String Class StringTokenizer mengenali setiap kata dengan menentukan sekumpulan karakter sebagai delimiter / pembatas ketika membentuk sebuah object StringTokenizer. Delimiter yang akan membagi sebuah string menjadi potongan-potongan yang disebut tokens. Class StringTokenizer mempunyai 3 constructor: public StringTokenizer(String s, String delim, boolean returnTokens) Membentuk sebuah StringTokenizer untuk sebuah string s dengan delimiter tertentu. Jika returnTokens bernilai true, delimiter akan dikembalikan sebagai sebuah token. public StringTokenizer(String s, String delim) Membentuk sebuah StringTokenizer untuk sebuah string s dengan delimiter tertentu delim, yang bukan merupakan sebuah token. public StringTokenizer(String s) Membentuk sebuah StringTokenizer untuk sebuah string s dengan delimiter default “ \t\n\r” (spasi, tab, pergantian garis baru / new line & carriage return) dan delimiter bukan merupakan sebuah token. Method hasMoreToken() bernilai true jika terdapat token yang tersisa pada string. Method nextToken() menghasilkan token selanjutnya pada string, sedangkan nextToken(String delim) menghasilkan token selanjutnya pada string setelah menempatkan delimiter / pembatas yaitu delim. Method countTokens() bernilai jumlah token yang terdapat pada string tokenizer. Modifikasi Contoh Program 1.1 sebelumnya untuk mengubah String (kalimat) menjadi format TitleCase (Huruf pertama setiap kata adalah huruf kapital dan sisanya huruf kecil). Output: Stream adalah proses untuk membaca data dari suatu sumber atau menulis data ke suatu tujuan. class stream ini berada paket java.io jadi untuk menggunakan harus diimpor terlebih dahulu. Hirarki kelas stream: Class InputStream merupakan class abstrak yang menjadi dasar bagi semua class yang berhubungan dengan pembacaan data dari suatu sumber. Method-method yang sering dipakai: int available() Metode ini mengembalikan jumlah data yang telah tersedia untuk dibaca. void close() Method untuk menutup stream. int read() Method untuk membaca sebuah byte data, nilai data yang dikembalikan. Class OutputStream merupakan class abstrak yang menjadi dasar untuk semua stream keluaran. Methodmethodnya: void clear() Method untuk menutup stream keluaran. void flush() Method ini memaksa penulisan. void write(int b) Method untuk menuliskan byte b ke stream keluaran. Class ByteArrayOutputStream merupakan class yang digunakan untuk mengirimkan keluaran ke suatu array dengan elemen bertipe byte. Class FileInputStream digunakan untuk membaca data dari suatu file. Class SequenceInputStream digunakan untuk menggabungkan dua buah stream masukan atau lebih menjadi sebuah stream masukan. Class DataInputStream digunakan untuk membaca data yang memiliki format khusus ke stream masukan. Class BufferedInputStream adalah class yang digunakan untuk membuat stream masukan berpenyangga. Tujuan penyanggaan ini adalah untuk membuat pembacaan data pada file dilakukan secara efisien. Class FileOutputStream digunakan untuk menulis keluaran ke suatu berkas. Class DataOuputStream digunakan untuk menuliskan berbagai tipe data ke stream keluaran dalam berbagai format yang tak bergantung pada mesin. Class BufferedOutputStream adalah class yang digunakan untuk membuat stream keluaran berpenyangga. Tujuan penyanggaan agar penulisan ke file dapat dilakukan secara efisien. Buat sebuah file .txt dengan isi terserah Anda lalu simpan dalam drive komputer Anda. Buat program Java untuk memanggil file txt tersebut dan menampilkan isi teksnya. Kodingnya: Modifikasi program Title Case sebelumnya sehingga dapat mengubah inputan berupa kalimat ke bentuk TitleCase dan menyimpannya dalam sebuah file .txt Dikerjakan secara individu. Dikumpulkan pada pertemuan berikutnya dalam bentuk hardcopy (tidak perlu dijilid). Sertakan kode program, print screen dan penjelasan program. Copy paste nilai = 0.