[Java] Baca Teks dan Simpan ke dalam Array Dua Dimensi

Pagi-pagi sambil nge-air putih (minum air putih maksudnya) sambil menikmati dinginnya Surabaya yang tumben-tumbenan. Alhamdulillah :D. Postingan ini muncul karena terinspirasi dari seorang kawan baik nun jauh disana, yang juga sedang menimba ilmu di kampus seberang. Sebuah pertanyaan darinya hingga lahirlah postingan ini :D.  Baiklah kita sapa dulu Betha Nurina Sari :D. Salam #semangat pagi dari Surabaya :D.

Oke langsung aja, jadi diperkirakan ada sebuah kasus semacam demikian :

Screen Shot 2013-12-31 at 8.15.20 am

Gambar diaatas adalah sebuah file plain text, yang berisi informasi seperti diatas, yang tersimpan dalam file kamar.txt. Nah, sekarang bagaimana caranya agar informasi-informasi diatas dapat disimpan ke dalam sebuah tipe data array 2 dimensi ???. Oke kita rancang dulu kebutuhan yang digunakan untuk menyelesaikan permasalahan di atas. Kebutuhan yag dirinci dapat dibuat sebuah fungsi atau method untuk memudahkan kita dalam mengutak-atik code. Kata suhu-suhu istilah kerennya OOP (Object Oriented Programming).

  1. Fungsi baca file teks, return value Arraylist<String>. Disini nama fungsi-nya saya namakan readTeks, dengan input parameter berupa nama file teks.
  2. Fungsi untuk menyimpan  kata/item dari masing-masing baris, dengan menggunakan pemisah/delimiter spasi. Nama fungsi dinamakan token, dengan input parameter berupa String kalimat (anggap aja per baris itu sebuah kalimat 😀 *alibi bingung ngasih nama variabel) 😀 ).
  3. Fungsi untuk menyimpan semua informasi dalam bentuk array 2 dimensi. Disini saya namakan saveToArray.

Kurang lebih itu fungsi-funsgi yang dibutuhkan, sekarang mari saatnya kita menjahit. Nah dibawah ini kurang lebih jahitan saya.

package TeksProcessing;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.StringTokenizer;

/**
 *
 * @author yuitaarumsari
 */
public class ReadTextSaveToArray {
    public static ArrayList<String> readTeks(String bacateks) throws FileNotFoundException, IOException {
        File bacafile = new File(bacateks);
        FileReader inputDokumen = new FileReader(bacafile);
        BufferedReader bufferBaca = new BufferedReader(inputDokumen);
        StringBuffer content = new StringBuffer();
        String barisData;
        ArrayList<String> data = new ArrayList<String>();
        while ((barisData = bufferBaca.readLine()) != null) {
            content.append(barisData);
            content.append(System.getProperty("line.separator"));
            data.add(barisData);
        }
        return data;
    }

    public static ArrayList<String> token(String kalimat) throws FileNotFoundException, IOException {
        ArrayList<String> listKata = new ArrayList<String>();
        StringTokenizer token = new StringTokenizer(kalimat, " ");//pemisahan kata dengan delimiter spasi
        while (token.hasMoreTokens()) {
            listKata.add(token.nextToken());
        }
        return listKata;
    }

    public static String[][] saveToArray(ArrayList<String> input) throws FileNotFoundException, IOException{
        String[][] data=new String[input.size()][4];
        for (int i = 0; i < input.size(); i++) {
             ArrayList<String> item=token(input.get(i));
             for (int j = 0; j < item.size(); j++) {
                data[i][j]=item.get(j);//memasukkan data ke dalam array
            }
        }
        return data;
    }

    public static void main(String[] args) throws FileNotFoundException, IOException {
        ArrayList<String> listData=readTeks("kamar.txt");
        String[][] array=saveToArray(listData);
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                System.out.print(array[i][j]+"\t");
            }
            System.out.println("");
        }
    }

}

Hasil program ketika dijalankan akan muncul seperti ini :

Screen Shot 2013-12-31 at 8.31.24 am

Okey, kurang lebih demikian pendapat dan cuap-cuap saya pada pagi ini. Sangat mungkin sekali masih ada banyak cara, selain cara yang saya gunakan, baik melihat dari sisi keefisienan, kompleksitas, dan efektifitas. So, discussions are welcomed :).

Well, terima kasih, semangat pagi, dan salam Java! 😀

Membaca Teks dari JFilechooser

Pada postingan kali ini saya ingin menjelaskan bagaimana kita bisa membaca sebuah file teks yang kita ambil dari JFileChooser. Salah satu komponen dalam java ini membantu kita untuk mempermudah interaksi secara user interface. IDE yang saya gunakan kali ini adalah Netbeans 7.2.

Oke kita mulai terlebih dahulu dengan membuat file .txt yang kita letakkan disembarang direktori,suka-suka hati dah.. 🙂 (Misalnya Anda akan meletakkannya di D:\data\test_meong.txt).

gambar2

Gambar 1. Contoh isi dari file teks test_meong.txt

Setelah kita buat file teks-nya, sekarang kita waktunya mendandani interface yang akan mau kita gunakan. Di sini saya menggunakan komponen label (“Masukkan File”), button (“BROWSE), text area (yang akan digunakan untuk meletakkan isi dari file teks). Pada gambar 2, perhatikan navigator di sidebar sebelah kiri pada Netbeans. Terlihat ada Other Components.  Continue reading

Membangun Tree Parse untuk Parsing di Stanford Parser Menggunakan Java

Salam Java…

Kali ini saya akan sedikit sharing mengenai salah satu fungsi library Stanford Parser di Java. Library macam apa itu? yang jelas bukan semacam tahu telor [kok jadi ngomongin makanan] 😀 .Oke begini, di dalam dunia NLP (Natural Language Processingstanford parser dapat digunakan untuk membantu kita dalam melakukan teknik parsing. Bahasa yang available support untuk stanford parser ini adalah English, Chinese dan Arabic.  Bagaimana dengan parsing Bahasa Indonesia? [out of topic ye…]. Oke kalau mau kenalan lebih lanjut dengan stanford silakan kunjungi link ini. Silakan unduh library-nya,  dan mari kita oprek sama-sama. Terserah mau pakek IDE apa, kali ini saya menggunakan Netbeans 7.2 untuk membantu mengerjakan stanford parser ini. Oh ya jangan lupa untuk mengunduh englishPCFG.ser.gz

Ini contoh code dalam stanford

package cobastanford.program;

import edu.stanford.nlp.objectbank.TokenizerFactory;
import edu.stanford.nlp.parser.lexparser.LexicalizedParser;
import edu.stanford.nlp.process.PTBTokenizer;
import edu.stanford.nlp.process.WordTokenFactory;
import edu.stanford.nlp.trees.Tree;
import edu.stanford.nlp.trees.TreePrint;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.StringReader;
import java.util.List;

/**
 *
 * @author yuitaarumsari
 */
public class Parsing {

public static void main(String[] args) throws FileNotFoundException, IOException {
 String text = "System should be able to handle many queries."
 + "Interaction between user and system should be easy.";
 LexicalizedParser lp = new LexicalizedParser("englishPCFG.ser.gz");;
 TreePrint tp = new TreePrint("penn");
 TokenizerFactory tf = PTBTokenizer.factory(false, new WordTokenFactory());
 List tokens = tf.getTokenizer(new StringReader(text)).tokenize();
 lp.parse(tokens); //parsing menjadi token-token
 Tree t = lp.getBestParse(); // get the best parse tree
 System.out.println("\nPROCESSED:\n\n");
 tp.printTree(t); // print tree
 }
}

Begitulah adanya program sederhana di dalam stanford. Output dari program diatas dapat dilihat pada gambar dibawah : Continue reading

Random Alphabet Automatically

This is one of ways that can face your problem of random String. Just random the index and you don’t need to type alphabet manually from A-Z, just use ASCII function and looping it. Here example of code [ using Java]

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package freeExercise;

import java.util.ArrayList;
import java.util.Random;

/**
 *
 * @author Yuita Arum Sari
 */
public class RandomAlphabet {

    static Random random = new Random();

    /**
     * Untuk merandom sebanyak inputan random, jika yang diinputkan panjang=5,
     * maka akan diisi sebanyak 5 elemen yang dirandom
     * @param panjang
     * @return
     */
    public static int[] getRandom(int panjang) {
        int[] rand = new int[panjang];
        for (int i = 0; i < rand.length; i++) {
            int hasil = random.nextInt(panjang);
            rand[i] = hasil;
        }
        return rand;
    }

    /**
     * Untuk mendapatkan increment alphabet secara otomatis
     * @return
     */
    public static ArrayList<String> getAlphabet(){
        ArrayList<String> listHuruf=new ArrayList<String>();
        for (int i = 65; i < 91; i++) {// menggunakan char ascii
            String huruf=Character.toString((char)i);
            listHuruf.add(huruf);
        }
        return listHuruf;
    }

    public static void main(String[] args) {
        System.out.println("**** Automatically Increment of Alphabet*****");
        ArrayList<String> list=getAlphabet();
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
        System.out.println("****Random sebanyak 5 huruf****");
        int[] angka = getRandom(5);
        for (int i = 0; i < angka.length; i++) {
            System.out.println(list.get(angka[i]));
        }
    }
}

#Just try it…


					

Executable File .jar : Laporan menggunakan Ireport pada Netbeans

Melengkapi postingan mengenai Menambah Plugin iReport pada Netbeans dan Menampilkan Laporan pada Java.

Pada kasus-kasus sebelumnya terdapat masalah ketika dibuat .jar report tidak bisa jalan. Saya ambil kasus yang sebelumnya yang telah saya buat yang saya letakkan dalam artikel Menampilkan Laporan Pada Java. Disana terdapat path file yang harus diload dan jenis filenya [line 6 pada kode]  berupa ekstensi .jasper. Ekstensi didapatkan dari hasil mengompile file report yang telah dibuat dalam Ireport.

Jika kita membuat report dengan nama file laporan2.jrxml , maka setelah dicompile akan terdapat file dengan nama laporan2.jasper. Nah file jasper ini yang saya gunakan yang digunakan dalam path file. Selanjutnya dengan menggunakan Netbeans,kita dimudahkan untuk membuat .jar file. Buatlah project baru, dan letakkan main project di dalam kelas yang otomatis terbuat ketika Anda membuat project baru. Klik kanan pada project dan press Build and Clean.

Sekarang silakan Anda coba buka folder dimana Anda meletakkan project Anda. Anda dapat melihat ada folder dist, dan ada file .jar disana. Silakan dijalankan. Folder dist juga dapat diletakkan di direktori mana saja. Asal jangan lupa ketika menjalankan file .jar tersebut pastikan MySQL anda menyala, karena dalam kasus ini report yang diambil yang berasal dari dBMS MySQL.

Silakan di download disini [contoh program menggunakan Ireport]

Penjelasan sedikit menjalankan program : buatlah database dengan nama dbase “cobasajakok” kemudian buat tabel dengan nama “Pegawai” dan isi atribut dari Pegawai adalah Nama, Alamat, dan Umur. Insert into nya terserah diisi apa, hanya buat ngecek saja, yang penting ada isinya. 😀 usernamenya: root, pwd nya kosong. Jalankan file .jar-nya dan klik tombol JButton1. Selamat mencoba 🙂

NB: Untuk kasus teman-teman yang menggunakan fungsi JRXmlLoader untuk meload file report atau JRLoader yang masih error untuk membuat file .jar nya mungkin kurang lebih caranya juga sama. Saya belum mencoba soalnya, nanti di share yah kalau bisa. 😀 Yang saya gunakan untuk load file adalah file .jasper bukan .jrxml.

Sekian informasi yang bisa diberikan. Semoga bermanfaat. 🙂

Load Image dalam JInternalFrame

Post ini dibuat dengan salah satu alasan yaitu mengurangi penasaran saya terhadap pertanyaan teman. Pertanyaannya adalah bagaimana load image di internal frame sehingga pada nantinya framenya bisa diminimize/maximize. Oh ya hampir lupa, kita disini belajar mengenai Java, jadi program yang akan kita pakai juga java. Saya menggunakan Netbeans 7.0, dimana untuk look and feel user interfacenya, saya masih import manual. 😀 Kurang lebih output programnya seperti ini.

Program dijalankan kemudian klik tombol browse, yang artinya memilih file gambar yang akan diinginkan, disini saya tidak menggunakan file filter untuk menyaring mana aja file yang akan diambil sebagai gambar. Setelah gambar dipilih dan klik tombol Open maka akan keluar tampilan seperti dibawah :

kGambar akan otomatis muncul dalam internalframe, dan selanjutnya bisa di minimize dan di maximize. 🙂

Baiklah kita langsung buka saja netbeansnya, silakan buat project baru, dan buat JFrame baru, silakan design sesuka hati. Tinggal drag and drop, untuk aturan mainnya sebelum memasukkan jinternalframe, drag dulu JDekstopPane nya. Setting di properties dengan klik kanan pada komponen JInternalFrame nya, aktifkan icon minimize dan iconifiable. Kurang lebih inspector dan design nya seperti gambar berikut : Continue reading

Matrix : Random Binary ~ Java

This is an example of matrix two dimension which is contain binary random. We can use class Random in Java

public class RandomBinarySet {
    public static void main(String[] args) {
        Random random = new Random();
        int[][] inputArray = new int[5][5];
        for (int i = 0; i < inputArray.length; i++) {
            for (int j = 0; j < inputArray[i].length; j++) {
                int result = random.nextInt(2);
                System.out.print(result+"\t");
            }
            System.out.println();
        }
    }
}

“int result = random.nextInt(2);” means that the value limited to binary ( is not more than 2). And below the output :

Membuat Splash Screen untuk Dekstop di Netbeans

Bahasa gaulnya splash screen. Ya mirip2 tampilan awal sebelum program utama dalam sebuah aplikasi itu berjalan. Contohnya seperti gambar di bawah :

Nah setelah progress bar tersebut otomatis dijalankan maka akan keluar tampilan program utama. Jadi intinya kaya semacam intermezo dalam sebuah aplikasi begitulah :D. Bagaimana membuatnya? oke cekidot  😀

 public Utama() {
  initComponents();
  this.setIconImage(new ImageIcon(getClass().getResource("/org/skripsi/yuita/GUI/favicon.jpeg")).getImage());
  aksiProgressBar();
  timer = new Timer(100, action);
  timer.start();
}

public void aksiProgressBar() {
  action = new ActionListener() {
  public void actionPerformed(ActionEvent e) {
    progressBar.setValue(progressBar.getValue() + 5); //persen progress bar bertambah setiap 5 kali
    progressBar.setStringPainted(true);
    if (progressBar.getPercentComplete() == 1.0) { // jika persen dari progress bar telah 100%
    try {
      timer.stop();
      gui = new GUIForm();
      gui.setVisible(true); //menampilkan program utama
   } catch (FileNotFoundException ex) {
     Logger.getLogger(Utama.class.getName()).log(Level.SEVERE, null, ex);
  } catch (IOException ex) {
     Logger.getLogger(Utama.class.getName()).log(Level.SEVERE, null, ex);
    }
   }
  }
 };
 this.dispose();
}

Buat method aksiProgressBar seperti diatas, didalam method tersebut terdapat baris code yang menunjukkan ketika proses progress bar selesai dijalankan, maka timer berhenti dan akan keluar tampilan program utama ( gui.setVisible(true)). Jadi inti sebenarnya program ini terletak bagaimana memberi aksi pada progress bar, dan kelas Timer digunakan untuk menjalankan progress bar, ketika progress bar mulai dijalankan maka diberikan aksi timer.start(), ketika progress bar selesai dijalankan maka diberikan aksi timer.stop().

Sekian dan terima kasih, semoga bermanfaat bagi teman-teman semua. Salam java! 🙂

Netbeans:Menjadikan Frame berada di Tengah Dekstop Ketika Dijalankan

Kasus disini adalah ketika kita membuat java Frame di Java Application pada Netbeans. Biasanya ketika pertama kali running file frame di netbeans, default frame tersebut akan dijalankan di bagian pojok kiri atas pada dekstop kita. Nah bagaimana biar tampilan frame tersebut berjalan di tengah dekstop kita, maka langsung aja cekidot 😀 Ketikkan baris code berikut di bawah code initComponents(). Contoh berikut dilakukan pada kelas Utama.java

public Utama() {
initComponents();
this.setLocationRelativeTo(getRootPane());
}

Sudah gitu aja sih, sangat simpel sebenernya 😀 semoga bermanfaat ^_^

Strawberry Perl : Retrieving Lyrics Music From LyricWiki

What is the PERL Programming? Google please…:) If you are familiar Terminal in Linux platform, you also can use a command line at Windows platform for code this language. But if u wanna more interactive using Perl programming in Windows platform you just have istalled Strawberry PERL.

download it at this link

After install strawberry PERL,check wheter perl has gonna be okay or not with this command line

perl -v

if your strawberry runs well you can see image above.

Well in this case i would like to try PERL Programming for retrieving some lyrics music. So we need web service which contain lyrics, i’ve taken it at http://lyrics.wikia.com/Lyrics_Wiki. I uses some Indonesian lyrics music. In order to get how to use webservice so we have to know about CPAN which is connected with PERL. Learn CPAN more in http://www.perl.org/cpan.html. Then just have install some modules with this code :

  • cpan WebService :: Audioscrobbler

  • cpan Lyrics::Fetcher::LyricWiki

Now you can use your PERL programming for retrieving lyrics based on the artist. You can try this code :

use WebService::Audioscrobbler;
use Lyrics::Fetcher::LyricWiki;
my $ws=WebService::Audioscrobbler->new;
my $artist=$ws->artist('Ada Band');
my @tracks=$artist->tracks;
for my $tracks(@tracks){
$lyric=Lyrics::Fetcher::LyricWiki->fetch($artist->name,$tracks->name);
$filename=$artist->name."-".$tracks->name;
open FILE,">",$filename or die $!;
print FILE $lyric;
close FILE
}

Run that code using command line perl (file perl).pl

Now enjoy your corpus lyrics music 🙂

Reference:

  1. (http://win32.perl.org/wiki/index.php?title=Strawberry_Perl)
  2. http://search.cpan.org/~bigpresh/Lyrics-Fetcher-LyricWiki/lib/Lyrics/Fetcher/LyricWiki.pm
  3. http://search.cpan.org/~nilsonsfj/WebService-Audioscrobbler-0.07/lib/WebService/Audioscrobbler.pm
  4. http://perl.about.com/od/packagesmodules/qt/perlcpan.htm
  5. http://lyrics.wikia.com/LyricWiki:SOAP
  6. https://adinu.wordpress.com/