langsung aje nih
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.PrintWriter;
public class compiler{
private static final int JUMLAH_KARAKTER = 256;
private static int[] total_per_karakter = new int[JUMLAH_KARAKTER];
public static void main(String args[]) throws FileNotFoundException {
PrintWriter output = new PrintWriter("output.txt");
String kata = null;
try (BufferedReader buffer = new BufferedReader(new FileReader("input.txt"))) {
String sCurrentLine;
while ((sCurrentLine = buffer.readLine()) != null) {
kata = sCurrentLine;
kata = kata.toLowerCase();
}
} catch (Exception e) {
}
// inisialisasikan setiap karakter berjumlah 0 buah
for (int i = 0; i < JUMLAH_KARAKTER; i++) {
total_per_karakter[i] = 0;
}
// hitung jumlah setiap karakter
int kata_len = kata.length();
for (int i = 0; i < kata_len; i++) {
total_per_karakter[(int) kata.charAt(i)]++;
}
// tampilkan jumlah setiap karakter
System.out.println();
output.println("VARIABLE");
char cTemp;
for (int i = 0; i < JUMLAH_KARAKTER; i++) {
if (total_per_karakter[i] > 0) {
if (((char) i >= 'a' && (char) i <= 'z')) {
cTemp = (char) i;
// System.out.println(cTemp + " : " + total_per_karakter[i]);
output.println(cTemp + " : " + total_per_karakter[i]);
}
}
}
output.println("DIGIT");
for (int i = 0; i < JUMLAH_KARAKTER; i++) {
if (total_per_karakter[i] > 0) {
if ((char) i >= '0' && (char) i <= '9') {
//System.out.println((char) i + " : " + total_per_karakter[i]);
output.println((char) i + " : " + total_per_karakter[i]);
}
}
}
output.println("OPERATOR");
for (int i = 0; i < JUMLAH_KARAKTER; i++) {
if (total_per_karakter[i] > 0) {
if (((char) i >= '(' && (char) i <= '/') || ((char) i >= '<' && (char) i <= '>')) {
//System.out.println((char) i + " : " + total_per_karakter[i]);
output.println((char) i + " : " + total_per_karakter[i]);
}
}
}
output.close();
}
}
keterangan :
1. jika kalian lihat setelah class, ada variable global yang menunjukan jumlah max karakter
private static final int JUMLAH_KARAKTER = 256;
private static int[] total_per_karakter = new int[JUMLAH_KARAKTER];
itu saya ambil mengikuti jumlah fungsi char yang kita gunakan sesuai ASCII2. kemudian untuk membaca file nya saya menggunakan fungsi FilleReader
String kata = null;
try (BufferedReader buffer = new BufferedReader(new FileReader("input.txt"))) {
String sCurrentLine;
while ((sCurrentLine = buffer.readLine()) != null) {
kata = sCurrentLine;
kata = kata.toLowerCase();
}
} catch (Exception e) {
}
kemudian variabel kata berfungsi menampung kalimat yang ada pada file input.txt3. kemudian variabel tersebut dimasukan kedalam indeks total_per_karakter tapi sebelumnya total perkarakter di inisialisasi terlebih dahulu untuk memastikan dia memulai dari indeks 0
// inisialisasikan setiap karakter berjumlah 0 buah
for (int i = 0; i < JUMLAH_KARAKTER; i++) {
total_per_karakter[i] = 0;
}
// hitung jumlah setiap karakter
int kata_len = kata.length();
for (int i = 0; i < kata_len; i++) {
total_per_karakter[(int) kata.charAt(i)]++;
}
dan fungsi charAt untuk memisahkan string menjadi char per indeks
4. dan terakhir hanya cukup melakukan perulangan dengan for dan disesuaikan dengan kondisi yang diinginkan.
for (int i = 0; i < JUMLAH_KARAKTER; i++) {
if (total_per_karakter[i] > 0) {
if (((char) i >= 'a' && (char) i <= 'z')) {
cTemp = (char) i;
// System.out.println(cTemp + " : " + total_per_karakter[i]);
output.println(cTemp + " : " + total_per_karakter[i]);
}
}
}
output.println("DIGIT");
for (int i = 0; i < JUMLAH_KARAKTER; i++) {
if (total_per_karakter[i] > 0) {
if ((char) i >= '0' && (char) i <= '9') {
//System.out.println((char) i + " : " + total_per_karakter[i]);
output.println((char) i + " : " + total_per_karakter[i]);
}
}
}
output.println("OPERATOR");
for (int i = 0; i < JUMLAH_KARAKTER; i++) {
if (total_per_karakter[i] > 0) {
if (((char) i >= '(' && (char) i <= '/') || ((char) i >= '<' && (char) i <= '>')) {
//System.out.println((char) i + " : " + total_per_karakter[i]);
output.println((char) i + " : " + total_per_karakter[i]);
}
}
}
tambahan jika ingin di jadikan dalam bentuk file cukup menggunakan PrintWritter sesuai contoh di atas. selesai :D
Emoticon Emoticon