LAMPIRAN
LISTING PROGRAM
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_height="match_parent"
tools:context="com.vici.kamusindo_korea.PencarianFragment"> <!-- TODO: Update blank fragment layout -->
<RelativeLayout
android:layout_width="match_parent" android:layout_height="match_parent" android:background="#e0ddff">
<View
android:id="@+id/view"
android:layout_width="match_parent" android:layout_height="2dp"
android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_below="@+id/textView" android:layout_marginLeft="30dp" android:layout_marginRight="80dp"
android:background="@color/colorPrimaryDark" /> <View
android:id="@+id/view2"
android:layout_width="match_parent" android:layout_height="50dp"
android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_alignParentTop="true"
android:background="@color/colorPrimary" /> <EditText
android:id="@+id/editText"
android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/textView2" android:layout_centerHorizontal="true" android:layout_marginBottom="20dp" android:layout_marginLeft="20dp" android:layout_marginRight="20dp" android:layout_marginTop="35dp"
android:background="@drawable/bg_edit_text" android:hint="Ketik disini..."
android:inputType="text"
android:textAlignment="center"
android:textColor="@android:color/white" android:textColorHint="#b4b4b4"
android:textSize="22sp" /> <TextView
android:id="@+id/textView"
android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/view" android:layout_alignStart="@+id/view" android:layout_marginBottom="7dp" android:layout_marginTop="7dp" android:text="Indonesia"
android:textColor="#b4cdff" android:textSize="34sp" /> <TextView
android:id="@+id/textView2"
android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignEnd="@+id/view" android:layout_alignRight="@+id/view" android:layout_below="@+id/textView" android:text="Korea"
android:textColor="@color/colorPrimaryDark" android:textSize="30sp" />
<LinearLayout
android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_below="@+id/editText" android:orientation="horizontal"> <Button
android:id="@+id/bt_kmp"
android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="2dp"
android:layout_weight="1"
android:background="@drawable/bg_button" android:text="KMP"
android:textColor="@android:color/white" android:textSize="18sp" />
<Button
android:id="@+id/bt_bm"
android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="2dp"
android:layout_weight="1"
android:background="@drawable/bg_button" android:text="BM"
android:textColor="@android:color/white" android:textSize="18sp" />
</LinearLayout>
<android.support.design.widget.FloatingActionButton android:id="@+id/fab1"
android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="right|top"
android:src="@android:drawable/stat_notify_sync" /> </FrameLayout>
package com.vici.kamusindo_korea;
import android.app.Fragment;
import android.app.ProgressDialog;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class PencarianFragment extends Fragment { View view;
SQLiteOpenHelper helper; SQLiteDatabase db;
Cursor cursor;
private ProgressDialog pDialog; String state = "Indo-Korea"; public PencarianFragment() {
// Required empty public constructor }
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
// Inflate the layout for this fragment
view =
inflater.inflate(R.layout.fragment_pencarian,container,fal se);
final TextView tv_indo =(TextView)
view.findViewById(R.id.textView);
final TextView tv_korea = (TextView)
view.findViewById(R.id.textView2);
final EditText et_input = (EditText)
view.findViewById(R.id.editText);
Button bt_bm = (Button) view.findViewById(R.id.bt_bm);
helper = new
DatabaseOpenHelper(getActivity().getBaseContext());
cursor = null;
bt_kmp.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View view) {
String pat = et_input.getText().toString(); if (pat.equals("")) {
Toast.makeText(getActivity(), "Masukan Masih Kosong", Toast.LENGTH_SHORT).show();
} else {
Intent i = new Intent(getActivity(), Hasil_KMP_Activity.class);
et_input.setText(""); i.putExtra("pat", pat); i.putExtra("state", state); startActivity(i);
} });
bt_bm.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View view) {
String pat = et_input.getText().toString(); if (pat.equals("")) {
Toast.makeText(getActivity(), "Masukan Masih Kosong", Toast.LENGTH_SHORT).show();
} else {
Intent i = new Intent(getActivity(), Hasil_BM_Activity.class);
et_input.setText(""); i.putExtra("pat", pat); i.putExtra("state", state); startActivity(i);
} });
FloatingActionButton fab = (FloatingActionButton)
view.findViewById(R.id.fab1);
fab.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View view) {
String temp = tv_indo.getText().toString(); tv_indo.setText(tv_korea.getText().toString());
tv_korea.setText(temp);
if (state.equals("Indo-Korea")) state = "Korea-Indo"; else state = "Indo-Korea";
} });
}
package com.vici.kamusindo_korea;
import android.content.DialogInterface;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.text.Html;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
public class Hasil_KMP_Activity extends AppCompatActivity { View view;
SQLiteOpenHelper helper; SQLiteDatabase db;
Cursor cursor;
double wMulai, wSelesai, wTotal; public int jum = 0, jumB = 0; String pat, state;
List<Result> resultList = new ArrayList<>(); private ListView listView;
private CustomListAdapter adapter; String temp;
String[] TB = {"tbKamusFull"}; @Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_hasil__kmp_); getSupportActionBar().setDisplayHomeAsUpEnabled(true);//button balik
getSupportActionBar().setHomeButtonEnabled(true);//button balik getSupportActionBar().setTitle("Hasil Pencarian..."); pat = getIntent().getStringExtra("pat");
state = getIntent().getStringExtra("state"); getSupportActionBar().setSubtitle(pat);
listView = (ListView) findViewById(R.id.list); adapter = new CustomListAdapter(this, resultList); listView.setAdapter(adapter);
listView.setOnItemClickListener(new
AdapterView.OnItemClickListener() { @Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) { String a, b;
String indonya = ((TextView)
view.findViewById(R.id.indonya)).getText().toString(); String koreanya = ((TextView)
view.findViewById(R.id.koreanya)).getText().toString(); ImageView imgnya = ((ImageView)
view.findViewById(R.id.imageView1));
ImageView imageView = new ImageView(getApplicationContext()); imageView.setImageDrawable(imgnya.getDrawable());
if (state.equals("Indo-Korea")) { a = "Indonesia \t: ";
b = "Korea \t\t: "; } else {
b = "Indonesia \t: "; a = "Korea \t\t: "; }
AlertDialog dialog = new
AlertDialog.Builder(Hasil_KMP_Activity.this) .setView(imageView)
.setTitle("Terjemahan") .setCancelable(false)
.setMessage(Html.fromHtml(a + "<b>" + indonya + "</b>" +
"<br/>" + b + "<b>" + koreanya + "</b><br/>")) .setPositiveButton("OK", new
DialogInterface.OnClickListener() { @Override
public void onClick(DialogInterface dialog, int which) { dialog.dismiss();
}
}).create(); dialog.show(); }
});
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View view) {hasil(); }
});
pat = getIntent().getStringExtra("pat"); pat = pat.toLowerCase();
state = getIntent().getStringExtra("state"); wMulai = System.currentTimeMillis();
startSearch(pat, state);
temp = String.valueOf(wTotal); }
public void hasil() {
AlertDialog dialog = new
AlertDialog.Builder(Hasil_KMP_Activity.this) .setTitle("Hasil Knuth Morris Pratt") .setMessage(Html.fromHtml(
"\nWaktu \t: " + temp + " ms" + "<br>Jumlah \t: " + jumB + " ditemukan"
))
.setPositiveButton("OK", new
DialogInterface.OnClickListener() { @Override
public void onClick(DialogInterface dialog, int which) { dialog.dismiss();
}
}).create(); dialog.show();
}
public void startSearch(String pattern, String states) { String txt, txtIndo, txtKorea;
helper = new DatabaseOpenHelper(this);//ambil dtbase cursor = null;
db = helper.getReadableDatabase();//read dibaca tnp dirubah
resultList.clear(); jumB = 0;
for (int nama_tabel = 0; nama_tabel < TB.length; nama_tabel++) {
cursor = db.rawQuery("SELECT * FROM " +
TB[nama_tabel] + " ORDER BY INDO ASC; ", null); if (cursor != null) {
try {
cursor.moveToFirst(); do {
if (states.equals("Indo-Korea")) {
txtIndo = txt = cursor.getString(1); txtKorea = cursor.getString(2); } else {
txtIndo = txt = cursor.getString(2); txtKorea = cursor.getString(1); }
//start
KMP_start(txt, pattern, txtIndo, txtKorea, cursor.getBlob(3));
} while (cursor.moveToNext()); } catch (Exception e) {
Log.d("Print", "catch startSearch"); }
} } try {
adapter = new CustomListAdapter(this, resultList); listView.setAdapter(adapter);
Log.d("Print", "catch update list"); }
db.close(); }
// Knuth Morris Pratt static String txt; static String patt; static String Indo; static String Korea; static byte[] Image; static char[] x; static char[] y; static int n; static int m;
static int[] kmpNext;
public void KMP_start(String getTxt, String getPatt, String getIndo, String getKorea, byte[] getImage) {
txt = getTxt; patt = getPatt; Indo = getIndo; Korea = getKorea; Image = getImage;
x = patt.toCharArray(); y = txt.toCharArray(); n = txt.length(); m = patt.length();
kmpNext = new int[m + 1]; KMP();
}
public static void preKmp() { int i, j;
i = 0;
j = kmpNext[0] = -1; while (i < m) {
while (j > -1 && x[i] != x[j]) { j = kmpNext[j];
} i++; j++;
if (i < m && j < m && x[i] == x[j]) { kmpNext[i] = kmpNext[j];
} else {
kmpNext[i] = j; }
} }
public void KMP() { int i, j;
/* Pre-processing */ preKmp();
i = j = 0; while (j < n) {
while (i > -1 && x[i] != y[j]) { i = kmpNext[i];
} i++; j++;
if (i >= m) {
// System.out.println(" Result = " + (j - i)); int pos = (j - i);
i = kmpNext[i]; jumB++;
Result m = new Result(); m.setIndo(Indo);
m.setKorea(Korea); m.setImage(Image); m.setPos(pos); m.setPat(patt); resultList.add(m);
Log.d("Print", "masuk KMP"); }
} }
@Override
public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId();
if (id == android.R.id.home) { this.finish();
return true; }
return super.onOptionsItemSelected(item); }
}
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:fitsSystemWindows="true"
tools:context="com.vici.kamusindo_korea.Hasil_KMP_Activity"> <include layout="@layout/content_hasil__kmp_" />
<android.support.design.widget.FloatingActionButton android:id="@+id/fab"
android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
android:src="@android:drawable/ic_dialog_info" /> </android.support.design.widget.CoordinatorLayout>
package com.vici.kamusindo_korea;
import android.content.DialogInterface;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.text.Html;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
public class Hasil_BM_Activity extends AppCompatActivity { View view;
SQLiteOpenHelper helper; SQLiteDatabase db;
Cursor cursor;
double wMulai, wSelesai, wTotal; public int jum = 0, jumB = 0; String pat, state;
List<Result> resultList = new ArrayList<>(); private ListView listView;
private CustomListAdapter adapter; String temp;
String[] TB = {"tbKamusFull"}; @Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_hasil__bm_);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);//button balik
getSupportActionBar().setHomeButtonEnabled(true);//button balik getSupportActionBar().setTitle("Hasil Pencarian..."); pat = getIntent().getStringExtra("pat");
state = getIntent().getStringExtra("state"); getSupportActionBar().setSubtitle(pat);
listView = (ListView) findViewById(R.id.list); adapter = new CustomListAdapter(this, resultList); listView.setAdapter(adapter);
listView.setOnItemClickListener(new
AdapterView.OnItemClickListener() { @Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) { String a, b;
String indonya = ((TextView)
view.findViewById(R.id.indonya)).getText().toString(); String koreanya = ((TextView)
view.findViewById(R.id.koreanya)).getText().toString(); ImageView imgnya = ((ImageView)
view.findViewById(R.id.imageView1));
ImageView imageView = new ImageView(getApplicationContext()); imageView.setImageDrawable(imgnya.getDrawable());
if (state.equals("Indo-Korea")) { a = "Indonesia \t: ";
b = "Korea \t\t: "; } else {
b = "Indonesia \t: "; a = "Korea \t\t: "; }
AlertDialog dialog = new
AlertDialog.Builder(Hasil_BM_Activity.this) .setView(imageView) .setTitle("Terjemahan") .setCancelable(false)
.setMessage(Html.fromHtml(a + "<b>" + indonya + "</b>" + "<br/>" + b + "<b>" + koreanya + "</b><br/>")) .setPositiveButton("OK", new
DialogInterface.OnClickListener() { @Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss(); }
}).create(); dialog.show();
} });
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View view) { hasil();
} });
pat = getIntent().getStringExtra("pat"); pat = pat.toLowerCase();
wMulai = System.currentTimeMillis(); startSearch(pat, state);
wSelesai = System.currentTimeMillis(); wTotal = wSelesai - wMulai;
temp = String.valueOf(wTotal); }
public void hasil() { AlertDialog dialog = new
AlertDialog.Builder(Hasil_BM_Activity.this) .setTitle("Hasil Boyer Moore") .setMessage(Html.fromHtml(
"\nWaktu \t: " + temp + " ms" +
"<br>Jumlah \t: " + jumB + " ditemukan" ))
.setPositiveButton("OK", new
DialogInterface.OnClickListener() { @Override
public void onClick(DialogInterface dialog, int which) { dialog.dismiss();
}
}).create(); dialog.show();
}
public void startSearch(String pattern, String states) { String txt, txtIndo, txtKorea;
helper = new DatabaseOpenHelper(this); cursor = null;
db = helper.getReadableDatabase(); resultList.clear();
jumB = 0;
for (int nama_tabel = 0; nama_tabel < TB.length; nama_tabel++) {
cursor = db.rawQuery("SELECT * FROM " +
TB[nama_tabel] + " ORDER BY INDO ASC; ", null); if (cursor != null) {
try {
cursor.moveToFirst(); do {
if (states.equals("Indo-Korea")) {
txtIndo = txt = cursor.getString(1); txtKorea = cursor.getString(2); } else {
txtIndo = txt = cursor.getString(2); txtKorea = cursor.getString(1); }
//start
BM_start(txt, pattern, txtIndo, txtKorea,
cursor.getBlob(3));
} while (cursor.moveToNext()); } catch (Exception e) {
Log.d("Print", "catch startSearch"); }
try {
adapter = new CustomListAdapter(this, resultList); listView.setAdapter(adapter);
} catch (Exception e) {
Log.d("Print", "catch update list"); }
db.close(); }
//Boyer Moore
static String txtB; static String patB; static char[] xB; static char[] yB; static int nB; static int mB;
static String IndoB; static String KoreaB; static byte[] ImageB;
static int[] suf = new int[256]; static int[] bmBc = new int[256]; static int[] bmGs = new int[256];
public void BM_start(String getTxt, String getPat, String getIndo, String getKorea, byte[] getImage) {
txtB = getTxt; patB = getPat; IndoB = getIndo; KoreaB = getKorea; ImageB = getImage;
xB = patB.toCharArray(); yB = txtB.toCharArray(); nB = txtB.length(); mB = patB.length(); BM();
}
public static void preBmBc() { for (int i = 0; i < 256; ++i) { bmBc[i] = mB;
}
for (int i = 0; i < mB - 1; ++i) { bmBc[xB[i]] = mB - i - 1; }
}
public static void suffixes() { int f = 0;
int g;
suf[mB - 1] = mB; g = mB - 1;
for (int i = mB - 2; i >= 0; --i) {
if (i > g && suf[i + mB - 1 - f] < i - g) { suf[i] = suf[i + mB - 1 - f];
} else {
g = i; }
f = i;
while (g >= 0 && xB[g] == xB[g + mB - 1 - f]) { --g;
}
suf[i] = f - g; }
} }
public static void preBmGs() { suffixes();
for (int i = 0; i < mB; ++i) { bmGs[i] = mB;
}
int j = 0;
for (int i = mB - 1; i >= 0; --i) { if (suf[i] == i + 1) {
for (; j < mB - 1 - i; ++j) { if (bmGs[j] == mB) { bmGs[j] = mB - 1 - i; }
} } }
for (int i = 0; i <= mB - 2; ++i) { bmGs[mB - 1 - suf[i]] = mB - 1 - i; }
}
public void BM() { int i, j;
/* Pre-processing */ preBmGs();
preBmBc(); /* Searching */ j = 0;
while (j <= nB - mB) {
for (i = mB - 1; i >= 0 && xB[i] == yB[i + j]; --i) ;
if (i < 0) {
//System.out.println(" Result = " + j); int pos = j;
j += bmGs[0];//
jumB++;//menmpung nilai yg uda ditemukan Result m = new Result();
} else {
j += Math.max(bmGs[i], bmBc[yB[i + j]] - mB + 1 + i);
} } }
@Override
public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId();
if (id == android.R.id.home) { this.finish();
return true;//true maka eksekusi nya berjalan }
return super.onOptionsItemSelected(item); }
}
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:fitsSystemWindows="true"
tools:context="com.vici.kamusindo_korea.Hasil_BM_Activity"> <include layout="@layout/content_hasil__bm_" />
<android.support.design.widget.FloatingActionButton android:id="@+id/fab"
android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
android:src="@android:drawable/ic_dialog_info" />