Farklı başlıkları araştırırken kendimi burda buldum :)
Başlık açılalı 3 hafta olmuş ama şöyle bir algoritmada belki birilerinin işine yarar.
public class sayidanYaziya {
public String[] birler = new String[]{"", "Bir", "İki", "Üç", "Dört", "Beş", "Altı", "Yedi", "Sekiz", "Dokuz"};
public String[] onlar = new String[]{"", "On ", "Yirmi ", "Otuz ", "Kırk ", "Elli ", "Altmış ", "Yetmiş ", "Seksen ", "Doksan "};
public String[] yuzler = new String[]{"", "Yüz ", "İkiyüz ", "Üçyüz ", "Dörtyüz ", "Beşyüz ", "Altıyüz ", "Yediyüz ", "Sekizyüz ", "Dokuzyüz "};
public String[] basamak = new String[]{"", " Bin ", " Milyon ", " Milyar ", " Trilyon "};
public String cevir(String sayi) {
if (sayi.matches("[0-9]*")) {
return yazdir(Integer.parseInt(sayi));
} else {
return "Sadece rakamlardan oluşan bir değer girmelisiniz!!!";
}
}
public String yazdir(int sayi) {
String sonuc = "";
if (sayi > 0) {
sonuc = basamaklarinaAyir(sayi);
} else if (sayi < 0) {
sonuc = "Eksi " + basamaklarinaAyir(Math.abs(sayi));
} else {
sonuc = "Sıfır";
}
return sonuc;
}
public String basamaklarinaAyir(int sayi) {
String sonuc = "", s = String.valueOf(sayi);
int i = s.length();
int b = i, x, n = 0;
while (i > 0) {
b = (b > 3 ? i - 3 : 0);
sonuc = ayir(s.substring(b, i)) + basamak[n] + sonuc;
i = i - 3;
n++;
}
if (sonuc.matches("(Bir) Bin ([A-Za-zğüşıöçĞÜŞİÖÇ[\\s]]*)")) {
Pattern p = Pattern.compile("(Bir) Bin ([A-Za-zğüşıöçĞÜŞİÖÇ[\\s]]*)");
Matcher m = p.matcher(sonuc);
if (m.find()) {
sonuc = "Bin " + m.group(2);
}
}
return sonuc;
}
public String ayir(String s) {
String sonuc = "";
int i = s.length();
switch (i) {
case 3:
sonuc = yuzler[Integer.parseInt(String.valueOf(s.charAt(i - 3)))];
case 2:
sonuc = sonuc + onlar[Integer.parseInt(String.valueOf(s.charAt(i - 2)))];
case 1:
sonuc = sonuc + birler[Integer.parseInt(String.valueOf(s.charAt(i - 1)))];
default:
}
return sonuc;
}
}
farkındayım kod biraz dağınık oldu.. :)
(koddan da anlamışsındır) sadece tam sayılar için çalışır, virgüllü sayılarda hata verir.
String deger = Object.cevir("123456");
şeklinde kullanabilirsin.
yok ben zaten direkt int türünde bir tamsayı girecem dersen direkt;
deger = Object.yazdir(123456);
şeklinde de kullanılabilir..