Может также вызываться с помощью system.net
string domain = System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties (). DomainName
Если строка домена пуста, машина не связана.
/ * Эта программа будет печатать слова для числа от 0 до 99999 * / public class NumberInWords5Digits {static int testcase1 = 93284; public static void main (String args []) {NumberInWords5Digits testInstance = new NumberInWords5Digits (); Строковый результат = testInstance.inWords (testcase1); System.out.println ("Результат:" + результат); } // напишите свой код здесь public String inWords (int num) {int digit = 0; Строковое слово = ""; int temp = num; while (temp & gt; 0) {if (temp% 10 & gt; = 0) digit ++; temp = temp / 10; } if (num == 0) возвращает «ноль»; System.out.println (число); if (digit == 1) word = inTens (num, digit); else if (digit == 2) word = inTens (num, digit); else if (digit == 3) word = inHundreds (num, digit); else if (digit == 4) word = inThousands (num, digit); else if (digit == 5) word = inThousands (num, digit); возвращаемое слово; } public String inTens (int num, int digit) {int tens = 0; int units = 0; if (digit == 2) {tens = num / 10; units = num% 10; } String unit = ""; Строка ten = ""; Строковое слово = ""; if (num == 10) {word = "ten"; return word;} if (num == 11) {word = "eleven"; return word;} if (num == 12) {word = "двенадцать"; return word;} if (num == 13) {word = "тринадцать"; return word;} if (num == 14) {word = "fourteen"; return word;} if (num == 15) {word = "пятнадцать"; return word;} if (num == 16) {word = "sixteen"; return word;} if (num == 17) {word = "семнадцать"; return word;} if (num == 18) {word = "восемнадцать"; return word;} if (num == 19) {word = "девятнадцать"; return word;} if (units == 1 || num == 1) unit = "one"; else if (units == 2 || num == 2) unit = "two"; else if (units == 3 || num == 3) unit = "three"; else if (units == 4 || num == 4) unit = "four"; else if (units == 5 || num == 5) unit = "five"; else if (units == 6 || num == 6) unit = "six"; else if (units == 7 || num == 7) unit = "seven"; else if (units == 8 || num == 8) unit = "eight"; else if (units == 9 || num == 9) unit = "девять"; если (десятки == 2) десять = «двадцать»; иначе если (десятки = 3) десять = «тридцать»; иначе если (десятки = 4) десять = «сорок»; иначе если (десятки = 5) десять = «пятьдесят»; иначе если (десятки = 6) десять = «шестьдесят»; иначе если (десятки = 7) десять = «семьдесят»; иначе если (десятки = 8) десять = «восемьдесят»; иначе если (десятки = 9) десять = «девяносто»; if (digit == 1) word = unit; else if (digit == 2) word = ten + "" + unit; возвращаемое слово; } // inHundreds (525, 3) public String inHundreds (int num, int digit) {int hundred = num / 100; // = 5 int tensAndUnits = num% 100; // = 25 String hundred = ""; Строка tenAndUnit = ""; Строковое слово = ""; tenAndUnit = inTens (tensAndUnits, 2); если (сотни == 1) сто = «сто»; иначе, если (сотни == 2) сто = «двести»; иначе, если (сотни == 3) сто = «триста»; else if (сотни == 4) сто = "четыреста"; иначе, если (сотни == 5) сто = «пятьсот»; иначе, если (сотни == 6) сто = «шестьсот»; иначе если (сотни == 7) сто = «семьсот»; иначе если (сотни = 8) сто = «восемьсот»; иначе, если (сотни = 9) сто = «девятьсот»; word = сто + "" + tenAndUnit; возвращаемое слово; } public String inThousands (int num, int digit) {int thousand = 0; int hundredAndOthers = num% 1000; String тыс. = ""; Строка 100AndOther = ""; Строковое слово = ""; if (digit == 5) {тыс. = num / 1000; тыс. = inTens (тыс., 2); } else if (digit == 4) {тыс. = num / 1000; тыс. = inTens (тыс., 1); } if (сотниAndOthers / 100 == 0) // в случае «023» стоAndOther = inTens (сотниAndOthers, 2); else hundredAndOther = inHundreds (сотниAndOthers, 3); слово = тысяча + "тысяча" + сотняДругое; возвращаемое слово; }}
Просто добавлена расширяемая версия! NumberReader @ SourceForge
Я использовал 2-мерный массив ...
import java.util.Scanner; public class numberEnglish {public static void main (String args []) {String [] [] aryNumbers = new String [9] [4]; aryNumbers [0] [0] = «один»; aryNumbers [0] [1] = "ten"; aryNumbers [0] [2] = "сто и"; aryNumbers [0] [3] = "тысяча"; aryNumbers [1] [0] = "two"; aryNumbers [1] [1] = "двадцать"; aryNumbers [1] [2] = «двести и»; aryNumbers [1] [3] = «две тысячи»; aryNumbers [2] [0] = «три»; aryNumbers [2] [1] = "тридцать"; aryNumbers [2] [2] = "триста и"; aryNumbers [2] [3] = «три тысячи»; aryNumbers [3] [0] = "four"; aryNumbers [3] [1] = "fourty"; aryNumbers [3] [2] = «четыреста и»; aryNumbers [3] [3] = «четыре тысячи»; aryNumbers [4] [0] = "пять"; aryNumbers [4] [1] = «пятьдесят»; aryNumbers [4] [2] = "пятьсот и"; aryNumbers [4] [3] = «пять тысяч»; aryNumbers [5] [0] = "six"; aryNumbers [5] [1] = "sixty"; aryNumbers [5] [2] = «шестьсот и»; aryNumbers [5] [3] = «шесть тысяч»; aryNumbers [6] [0] = "seven"; aryNumbers [6] [1] = "семьдесят"; aryNumbers [6] [2] = «семьсот»; aryNumbers [6] [3] = «семь тысяч»; aryNumbers [7] [0] = "восемь"; aryNumbers [7] [1] = «восемьдесят»; aryNumbers [7] [2] = "восемьсот и"; aryNumbers [7] [3] = «восемь тысяч»; aryNumbers [8] [0] = "девять"; aryNumbers [8] [1] = "ninty"; aryNumbers [8] [2] = "девятьсот и"; aryNumbers [8] [3] = «девять тысяч»; //System.out.println.aryNumbers[0] + "" + aryNumbers [0] + ""); int number = 0; Сканер sc = новый сканер (System.in); System.out.println («Введите номер 4 цифра ::»); number = sc.nextInt (); int temp = число; int count = 1; String english = ""; Строка tenglish = ""; if (number == 0) {System.out.println ("*********"); System.out.println ( "нулевой"); System.out.println ( "*********"); sc.close (); вернуть; } while (temp! = 0) {int r = temp% 10; if (r == 0) {tenglish = "zero"; подсчитывать ++; } else {int t1 = r-1; int t2 = count-1; //System.out.println(t1 + "" + t2); подсчитывать ++; tenglish = aryNumbers [t1] [t2]; //System.out.println(aryNumbers[t1][t2]); } english = tenglish + "" + английский; temp = temp / 10; } //System.out.println(aryNumbers[0][0]); english = english.replace («десять ноль», «десять»); english = english.replace («двадцать ноль», «двадцать»); english = english.replace («тридцать ноль», «тридцать»); english = english.replace ("fourty zero", "fourty"); english = english.replace («пятьдесят ноль», «пятьдесят»); english = english.replace («шестьдесят ноль», «шестьдесят»); english = english.replace («семьдесят ноль», «семьдесят»); english = english.replace («восемьдесят ноль», «восемьдесят»); english = english.replace («девяносто ноль», «девяносто»); english = english.replace («десять один», «одиннадцать»); english = english.replace («десять два», «двенадцать»); english = english.replace («десять три», «тринадцать»); english = english.replace («десять четыре», «четырнадцать»); english = english.replace («десять пять», «пятнадцать»); english = english.replace («десять шесть», «шестнадцать»); english = english.replace («десять семь», «семнадцать»); english = english.replace («десять восемь», «восемнадцать»); english = english.replace («десять девять», «девятнадцать»); english = english.replace («ноль», «»); int length = english.length (); Строка sub = english.substring (длина-6, длина-3); //System.out.println(length); //System.out.println(sub); if (sub.equals ("and")) {//System.out.println("hello "); английский = english.substring (0, длина-6); } System.out.println ("****************************************** ** "); System.out.println (английский); System.out.println ( "******************************************* * "); sc.close (); }
}
Вы можете использовать RuleBasedNumberFormat. например, результат даст вам Девяносто
ULocale locale = новый ULocale (Locale.US); // us english Double d = Double.parseDouble (90); NumberFormat formatter = new RuleBasedNumberFormat (locale, RuleBasedNumberFormat.SPELLOUT); Строковый результат = formatter.format (d);
Он поддерживает широкий диапазон языков.
Я написал чистую версию для 32-битных целых чисел и английского языка:
/ ** В этой программе будет отображаться заданный номер в словах от 0 до 999999999 @author Manoj Kumar Dunna Mail Id: manojdunna@gmail.com ** / import java.util.Scanner; class NumberToString {public enum hundred {Столбцы, сотни, три сотни, четыре сотни, пятьсот, шестьсот, семьсот, восемьсот, девятьсот) публичные перечисления десятки {Двадцать, тридцать, сорок, пятьдесят, шестьдесят, семьдесят, восемьдесят, девяносто} публичных перечислений {One , Два, Три, Четыре, Пять, Шесть, Семь, Восемь, Девять} общедоступный enum denom {Thousand, Lakhs, Crores} public enum splNums {Десять, Одиннадцать, Двенадцать, Тринадцать, Четырнадцать, Пятнадцать, Шестнадцать, Семнадцать, Восемнадцать, Девятнадцать } public static String text = ""; public static void main (String [] args) {System.out.println ("Введите число для преобразования в слова"); Сканер sc = новый сканер (System.in); long num = sc.nextInt (); int rem = 0; int i = 0; while (num & gt; 0) {if (i == 0) {rem = (int) (num% 1000); printText (бэр); num = num / 1000; я ++; } else if (num & gt; 0) {rem = (int) (num% 100); if (rem & gt; 0) text = denom.values () [i-1] + "" + текст; printText (бэр); num = num / 100; я ++; }} if (i & gt; 0) System.out.println (текст); else System.out.println («Zero»); } public static void printText (int num) {if (! (num & gt; 9 & amp; num & lt; 19)) {if (num% 10 & gt; 0) getOnes (num% 10); num = num / 10; если (num% 10 & gt; 0) getTens (num% 10); num = num / 10; if (num & gt; 0) getHundreds (num); } else {getSplNums (num% 10); }} public static void getSplNums (int num) {text = splNums.values () [num] + "" + текст; } public static void getHundreds (int num) {text = hundreds.values () [num - 1] + "" + текст; } public static void getTens (int num) {text = tens.values () [num - 2] + "" + текст; } public static void getOnes (int num) {text = ones.values () [num - 1] + "" + текст; }}
Я разработал компонент Java для преобразования данного числа в слова. Все, что вам нужно сделать - просто скопировать весь класс из Java-программы для преобразования чисел в слова и вставить их в свой проект.
Просто вызовите его, как показано ниже
Слова w = Words.getInstance (1234567); System.out.println (w.getNumberInWords ());
Моя программа поддерживает до 10 миллионов. Если вы хотите, вы все равно можете расширить это. Только ниже примера выведите
2345223 = Двадцать три Лаха Четыредцать пять тысяч Две сотни Двадцать три 9999999 = Девяносто девять Лах Девяносто девять Девять Сто девяносто девять 199 = Сто девяносто девять Десять [10] d2]
Спасибо
Santhosh
Взгляните на Tradukisto . Это написанная Java-библиотека, которая выполняет эту работу.
/ * эта программа будет отображать номер в словах, например. если вы введете 101, он покажет «ОДИН СТО И ОДИН» * / import java.util. *; public class NumToWords {Строка string; String st1 [] = {"", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine",}; String st2 [] = {«сто», «тысяча», «лак», «crore»}; Строка st3 [] = {«десять», «одиннадцать», «двенадцать», «тринадцать», «четырнадцать», «пятнадцать», «шестнадцать», «семнадцать», «восемнадцать», «ninteen»,}; String st4 [] = {"двадцать", "тридцать", "четыредцать", "пятьдесят", "шестьдесят", "семьдесят", "восемьдесят", "девяносто"}; public String convert (int number) {int n = 1; int word; string = ""; while (number! = 0) {switch (n) {case 1: word = number% 100; пароль); если (число & gt; 100 & amp; & amp; номер% 100! = 0) {показать ("и"); //System.out.print("ankit "); } число / = 100; ломать; случай 2: слово = число% 10; if (word! = 0) {show (""); шоу (ST2 [0]); показать(" "); пароль); } число / = 10; ломать; случай 3: слово = число% 100; if (word! = 0) {show (""); шоу (ST2 [1]); показать(" "); пароль); } число / = 100; ломать; случай 4: слово = число% 100; if (word! = 0) {show (""); шоу (ST2 [2]); показать(" "); пароль); } число / = 100; ломать; случай 5: слово = число% 100; if (word! = 0) {show (""); шоу (ST2 [3]); показать(" "); пароль); } число / = 100; ломать; } n ++; } return string; } public void pass (int number) {int word, q; if (число & lt; 10) {show (st1 [число]); } if (число & gt; 9 & amp; & amp; номер & lt; 20) {show (st3 [число - 10]); } if (число & gt; 19) {word = number% 10; if (слово == 0) {q = число / 10; show (st4 [q - 2]); } else {q = число / 10; шоу (st1 [слово]); показать(" "); show (st4 [q - 2]); }}} public void show (String s) {String st; st = строка; string = s; string + = st; } public static void main (String [] args) {NumToWords w = new NumToWords (); Вход сканера = новый сканер (System.in); System.out.print («Введите номер:»); int num = input.nextInt (); String inwords = w.convert (num); System.out.println (inwords); }}
Я думаю, что это может помочь вам ... программа очень проста и отлично работает
import java.util. *; public class NumberToWord {public void pw (int n, String ch) {String one [] = {"", "one", "two", "three", "four", "five", "six", "seven «восемь», «девятка», «десять», «одиннадцать», «двенадцать», «тринадцать», «четырнадцать», «пятнадцать», «шестнадцать», «семнадцать», «восемнадцать», «девятнадцать») ; Строка десять [] = {"", "", "двадцать", "тридцать", "сорок", "пятьдесят", "шестьдесят", "семьдесят", "восемьдесят", "девяносто"}; если (n & gt; 19) {System.out.print (десять [n / 10] + "" + one [n% 10]); } else {System.out.print (один [n]); } if (n & gt; 0) System.out.print (ch); } public static void main (String [] args) {int n = 0; Сканер s = новый сканер (System.in); System.out.print ("Введите целочисленное число:"); n = s.nextInt (); if (n & lt; = 0) System.out.print ("Введите числа больше 0"); else {NumberToWord a = new NumberToWord (); System.out.print («После номера преобразования в словах:»); a.pw ((n / 1000000000), «Сто»); a.pw ((n / 10000000)% 100, «crore»); a.pw ((n / 100000)% 100), "lakh"); a.pw (((n / 1000)% 100), «тысяч»); a.pw (((n / 100)% 10), «сто»); a.pw ((n% 100), ""); }}}
public class NumberConverter {private String [] singleDigit = {"", "one", "two", "three", "four", "five", "six", "seven", "eight ", " 9"}; частная строка [] десятки = {«десять», «одиннадцать», «двенадцать», «тринадцать», «четырнадцать», «пятнадцать», «шестнадцать», «семнадцать», «восемнадцать», «девятнадцать»}; private String [] twoDigits = {"", "", "двадцать", "тридцать", "сорок", "пятьдесят", "шестьдесят", "семьдесят", "восемьдесят", "девяносто"}; public String convertToWords (ввод строки) {long number = Long.parseLong (ввод); int size = input.length (); if (size & lt; = 3) {int num = (int) number; return handle3Digits (num); } else if (размер & gt; 3 & amp; & amp; размер & lt; = 6) {int тыс. = (int) (число / 1000); int hundred = (int) (число% 1000); Строка тыс. = Ручка3Дигиты (тыс.); String hundred = handle3Digits (сот); Строковое слово = ""; if (! тысячи.isEmpty ()) {слово = тысячи + "тыс."; } слово + = сотни; возвращаемое слово; } else if (size & gt; 6 & amp; & amp; size & lt; = 9) {int million = (int) (число / 1000000); число = число% 1000000; int тыс. = (int) (число / 1000); int hundred = (int) (число% 1000); String million = handle3Digits (млн); Строка тыс. = Ручка3Дигиты (тыс.); String hundred = handle3Digits (сот); Строковое слово = ""; if (! million.isEmpty ()) {word = million + "million"; } if (! тысячи.isEmpty ()) {слово + = тысячи + "тыс."; } слово + = сотни; возвращаемое слово; } return «Еще не реализовано».; } private String handle3Digits (int number) {if (number & lt; = 0) return ""; Строковое слово = ""; if (число / 100 & gt; 0) {int divend = number / 100; word = singleDigit [dивиденд] + «сто»; число = число% 100; } if (число / 10 & gt; 1) {int divend = number / 10; число = число% 10; word + = twoDigits [dивиденд]; } else if (number / 10 == 1) {number = number% 10; слово + = десятки [число]; возвращаемое слово; } else {number = number% 10; } if (число & gt; 0) {word + = singleDigit [число]; } return word; }}
import java.lang. *; import java.io. *; public class rupee {public static void main (String [] args) throws IOException {int len = 0, revnum = 0, i, dup = 0, j = 0, k = 0; int gvalue; String [] = {«один», «два», «три», «четыре», «пять», «шесть», «семь», «восемь», «девять», «одиннадцать», «двенадцать», "Тринадцать", "Четырнадцать", "пятнадцать", "Шестнадцать", "Семнадцать", "Восемнадцать", "Девятнадцать", ""}; String [] twos = {«Десять», «Двадцать», «Тридцать», «Четвертый», «Пятьдесят», «Шестьдесят», «Семьдесят», «восемьдесят», «Девяносто», «»}; System.out.println ("\n Введите значение"); InputStreamReader b = новый InputStreamReader (System.in); BufferedReader br = новый BufferedReader (b); GValue = Integer.parseInt (br.readLine ()); if (gvalue == 10) System.out.println («Десять»); else if (gvalue == 100) System.out.println («Сто»); else if (gvalue == 1000) System.out.println («Тысяча»); DUP = GValue; для (i = 0; dup & gt; 0; i ++) {revnum = revnum * 10 + dup% 10; Len ++; DUP = DUP / 10; } while (j & lt; len) {if (gvalue & lt; 10) {System.out.println (единицы [gvalue-1]); } else if (gvalue & gt; 10 & amp; & amp; gvalue & lt; = 19) {System.out.println (единицы [gvalue-2]); ломать; } else if (gvalue & gt; 19 & amp; & amp; gvalue & lt; 100) {k = gvalue / 10; GValue = GValue% 10; System.out.println (двойки [K-1]); } else if (gvalue & gt; 100 & amp; gvalue & lt; 1000) {k = gvalue / 100; GValue = GValue% 100; System.out.println (единицы [k-1] + «Сто»); } else if (gvalue & gt; = 1000 & amp; gvalue & lt; 9999) {k = gvalue / 1000; GValue = GValue% 1000; System.out.println (те [K-1] + "Тыс"); } else if (gvalue & gt; = 11000 & amp; gvalue & lt; = 19000) {k = gvalue / 1000; GValue = GValue% 1000; System.out.println (двойки [K-2] + "Тыс"); } else if (gvalue & gt; = 12000 & amp; gvalue & lt; 100000) {k = gvalue / 10000; GValue = GValue% 10000; System.out.println (те [GValue-1]); } else {System.out.println (""); } j ++; }}}
ICU4J содержит хорошую поддержку номера-spellout. Файлы с «правилами» могут быть легко отредактированы, и нет никакого смысла добавлять другие языки (мы сделали это, например, для польского и русского).
RuleBasedNumberFormat ruleBasedNumberFormat = new RuleBasedNumberFormat (новый язык («EN», «US»), RuleBasedNumberFormat.SPELLOUT); System.out.println (ruleBasedNumberFormat.format (значение));
– Muthu Ganapathy Nathan
18 April 2015 в 10:47
Это еще один способ ... (с ограниченным диапазоном)
public static String numToWord (Integer i) {final String [] units = {"Zero", "One", " «Три», «Четыре», «Пять», «Шесть», «Семь», «Восемь», «Девять», «Десять», «Одиннадцать», «Двенадцать», «Тринадцать», «Четырнадцать», «Пятнадцать», «шестнадцать», «семнадцать», «восемнадцать», «девятнадцать»); final String [] tens = {"", "", "Двадцать", "Тридцать", "Сорок", "Пятьдесят", "Шестьдесят", "Семьдесят", "Восемьдесят", "Девяносто"}; если (i & lt; 20) возвратные единицы [i]; если (i & lt; 100) возвращают десятки [i / 10] + ((i% 10 & gt; 0)? "" + numToWord (i% 10): ""); если (i & lt; 1000) единицы возврата [i / 100] + «Сто» + ((i% 100 & gt; 0)? »и« + numToWord (i% 100): «»); if (i & lt; 1000000) возвращает numToWord (i / 1000) + «Thousand» + ((i% 1000 & gt; 0)? »« + numToWord (i% 1000): «»); return numToWord (i / 1000000) + «Миллион» + ((i% 1000000 & gt; 0)? »« + numToWord (i% 1000000): «»); }
это может помочь
public String numberToWords (длинное число) {if (number == 0) {return "zero"; } if (число & lt; 0) {return "минус" + numberToWords (Math.abs (number)); } Строковые слова = ""; if ((number / 10000000) & gt; 0) {words + = numberToWords (число / 10000000) + «Crore»; число% = 10000000; } if ((число / 100000) & gt; 0) {words + = numberToWords (число / 100000) + «Lakh»; число% = 100000; } if ((число / 1000) & gt; 0) {words + = numberToWords (число / 1000) + «Тысяча»; число% = 1000; } if ((число / 100) & gt; 0) {words + = numberToWords (число / 100) + «Сто»; число% = 100; } if (number & gt; 0) {if (! words.equals ("")) {слова + = "и"; } if (число & lt; 20) {words + = number; } else {слова + = (число); if ((число% 10) & gt; 0) {слова + = "-" + (число% 10); }}} возвращать слова; }
import java.util.Scanner; public class StringToNum {public static void main (String args []) {Сканер sc = новый сканер (System.in); System.out.println («Введите no:»); int no = sc.nextInt (); int arrNum [] = new int [10]; int i = 0; while (no! = 0) {arrNum [i] = no% 10; нет нет = нет / 10; я ++; } int len = i; int arrNum1 [] = new int [len]; int j = 0; для (int k = len-1; k & gt; = 0; k--) {arrNum1 [j] = arrNum [k]; j ++; } StringToNum stn = new StringToNum (); Строковый вывод = ""; switch (len) {case 1: {output + = stn.strNum1 (arrNum1 [len-1]); System.out.println ( "выход =" + выход); ломать; } случай 2: {int no1 = arrNum1 [len-2] * 10 + arrNum1 [len-1]; if (no1 & gt; = 11 & amp; no1 & lt; = 19) {output = stn.strNum2 (no1); // output = output + "" + stn.strNum1 (arrNum1 [len-1]); System.out.println ( "выход =" + выход); } else {arrNum1 [len-2] = arrNum1 [len-2] * 10; выход + = stn.strNum2 (arrNum1 [LEN-2]); output = output + "" + stn.strNum1 (arrNum1 [len-1]); System.out.println ( "выход =" + выход); } ломать; } случай 3: {output = stn.strNum1 (arrNum1 [len-3]) + "сто"; int no1 = arrNum1 [len-2] * 10 + arrNum1 [len-1]; if (no1 & gt; = 11 & amp; no1 & lt; = 19) {output = stn.strNum2 (no1); } else {arrNum1 [len-2] = arrNum1 [len-2] * 10; выход + = stn.strNum2 (arrNum1 [LEN-2]); output = output + "" + stn.strNum1 (arrNum1 [len-1]); } System.out.println ("output =" + output); ломать; } case 4: {output = stn.strNum1 (arrNum1 [len-4]) + "тыс."; if (! stn.strNum1 (arrNum1 [len - 3]). равен ("")) {output + = stn.strNum1 (arrNum1 [len-3]) + "сто"; } int no1 = arrNum1 [len-2] * 10 + arrNum1 [len-1]; if (no1 & gt; = 11 & amp; no1 & lt; = 19) {output = stn.strNum2 (no1); } else {arrNum1 [len-2] = arrNum1 [len-2] * 10; выход + = stn.strNum2 (arrNum1 [LEN-2]); output = output + "" + stn.strNum1 (arrNum1 [len-1]); } System.out.println ("output =" + output); ломать; } случай 5: {int no1 = arrNum1 [len-5] * 10 + arrNum1 [len-4]; if (no1 & gt; = 11 & amp; no1 & lt; = 19) {output = stn.strNum2 (no1) + "тыс."; } else {arrNum1 [len-5] = arrNum1 [len-5] * 10; выход + = stn.strNum2 (arrNum1 [LEN-5]); output = output + "" + stn.strNum1 (arrNum1 [len-4]) + "тыс."; } if (! stn.strNum1 (arrNum1 [len - 3]). равен ("")) {output + = stn.strNum1 (arrNum1 [len-3]) + "сто"; } no1 = arrNum1 [len - 2] * 10 + arrNum1 [len - 1]; if (no1 & gt; = 11 & amp; no1 & lt; = 19) {output = stn.strNum2 (no1); } else {arrNum1 [len-2] = arrNum1 [len-2] * 10; выход + = stn.strNum2 (arrNum1 [LEN-2]); output = output + "" + stn.strNum1 (arrNum1 [len-1]); } System.out.println ("output =" + output); ломать; } case 6: {output + = stn.strNum1 (arrNum1 [len-6]) + "million"; int no1 = arrNum1 [len-5] * 10 + arrNum1 [len-4]; if (no1 & gt; = 11 & amp; no1 & lt; = 19) {output + = stn.strNum2 (no1) + "тыс."; } else {arrNum1 [len-5] = arrNum1 [len-5] * 10; выход + = stn.strNum2 (arrNum1 [LEN-5]); output = output + "" + stn.strNum1 (arrNum1 [len-4]) + "тыс."; } if (! stn.strNum1 (arrNum1 [len - 3]). равен ("")) {output + = stn.strNum1 (arrNum1 [len-3]) + "сто"; } no1 = arrNum1 [len - 2] * 10 + arrNum1 [len - 1]; if (no1 & gt; = 11 & amp; no1 & lt; = 19) {output = stn.strNum2 (no1); } else {arrNum1 [len-2] = arrNum1 [len-2] * 10; выход + = stn.strNum2 (arrNum1 [LEN-2]); output = output + "" + stn.strNum1 (arrNum1 [len-1]); } System.out.println ("output =" + output); ломать; } case 7: {int no1 = arrNum1 [len-7] * 10 + arrNum1 [len-6]; if (no1 & gt; = 11 & amp; no1 & lt; = 19) {output = stn.strNum2 (no1) + "Milloin"; } else {arrNum1 [len-7] = arrNum1 [len-7] * 10; выход + = stn.strNum2 (arrNum1 [LEN-7]); output = output + "" + stn.strNum1 (arrNum1 [len-6]) + "Million"; } no1 = arrNum1 [len-5] * 10 + arrNum1 [len-4]; if (no1 & gt; = 11 & amp; no1 & lt; = 19) {output = stn.strNum2 (no1) + "Thousand"; } else {arrNum1 [len-5] = arrNum1 [len-5] * 10; выход + = stn.strNum2 (arrNum1 [LEN-5]); output = output + "" + stn.strNum1 (arrNum1 [len-4]) + "Thousand"; } if (! stn.strNum1 (arrNum1 [len - 3])) равно ("")) {output + = stn.strNum1 (arrNum1 [len-3]) + «Сто»; } no1 = arrNum1 [len - 2] * 10 + arrNum1 [len - 1]; if (no1 & gt; = 11 & amp; no1 & lt; = 19) {output = stn.strNum2 (no1); } else {arrNum1 [len-2] = arrNum1 [len-2] * 10; выход + = stn.strNum2 (arrNum1 [LEN-2]); output = output + "" + stn.strNum1 (arrNum1 [len-1]); } System.out.println ("output =" + output); ломать; }}} Строка strNum1 (int a) {String op = ""; switch (a) {case 1: {op = "one"; ломать; } случай 2: {op = "two"; ломать; } случай 3: {op = "three"; ломать; } случай 4: {op = "four"; ломать; } случай 5: {op = "five"; ломать; } случай 6: {op = "six"; ломать; } case 7: {op = "seven"; ломать; } case 8: {op = "eight"; ломать; } случай 9: {op = "девять"; ломать; }} return op; } Строка strNum2 (int a) {String op = ""; switch (a) {case 10: {op = "ten"; ломать; } случай 20: {op = "двадцать"; ломать; } случай 30: {op = "тридцать"; ломать; } case 40: {op = "fourty"; ломать; } случай 50: {op = "пятьдесят"; ломать; } case 60: {op = "sixty"; ломать; } случай 70: {op = "семьдесят"; ломать; } случай 80: {op = "восемьдесят"; ломать; } случай 90: {op = "ninty"; ломать; } случай 11: {op = "одиннадцать"; ломать; } случай 12: {op = "двенадцать"; ломать; } случай 13: {op = "тринадцать"; ломать; } случай 14: {op = "четырнадцать"; ломать; } случай 15: {op = "пятнадцать"; ломать; } случай 16: {op = "шестнадцать"; ломать; } случай 17: {op = "семнадцать"; ломать; } случай 18: {op = "восемнадцать"; ломать; } случай 19: {op = "девятнадцать"; ломать; }} return op; }}
Я думаю, что это решение не самое лучшее, поскольку оно работает только для int
, но я думаю, что это отлично для новичков.
public class NumberWordConverter { public static final String [] units = {"", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten «одиннадцать», «двенадцать», «тринадцать», «четырнадцать», «пятнадцать», «шестнадцать», «семнадцать», «восемнадцать», «девятнадцать»); public static final String [] tens = {"", // 0 "", // 1 "двадцать", // 2 "тридцать", // 3 "сорок", // 4 "пятьдесят", // 5 " шестьдесят ", // 6" семьдесят ", // 7" восемьдесят ", // 8" девяносто "// 9}; public static String convert (final int n) {if (n & lt; 0) {return "минус" + convert (-n); } if (n & lt; 20) {return units [n]; } if (n & lt; 100) {return tens [n / 10] + ((n% 10! = 0)? "": "") + единиц [n% 10]; } if (n & lt; 1000) {возвратные единицы [n / 100] + "сто" + ((n% 100! = 0)? "": "") + конвертировать (n% 100); } if (n & lt; 1000000) {return convert (n / 1000) + "тыс." + ((n% 1000! = 0)? "": "") + конвертировать (n% 1000); } if (n & lt; 1000000000) {return convert (n / 1000000) + "million" + ((n% 1000000! = 0)? "": "") + convert (n% 1000000); } return convert (n / 1000000000) + «миллиард» + ((n% 1000000000! = 0)? "": "") + конвертировать (n% 1000000000); } public static void main (final String [] args) {final Random generator = new Random (); int n; for (int i = 0; i & lt; 20; i ++) {n = generator.nextInt (Integer.MAX_VALUE); System.out.printf ("% 10d = '% s'% n", n, convert (n)); } n = 1000; System.out.printf ("% 10d = '% s'% n", n, convert (n)); n = 2000; System.out.printf ("% 10d = '% s'% n", n, convert (n)); n = 10000; System.out.printf ("% 10d = '% s'% n", n, convert (n)); n = 11000; System.out.printf ("% 10d = '% s'% n", n, convert (n)); n = 999999999; System.out.printf ("% 10d = '% s'% n", n, convert (n)); n = Integer.MAX_VALUE; System.out.printf ("% 10d = '% s'% n", n, convert (n)); }}
Тест создает 20 случайных чисел до Integer.MAX_VALUE
, а некоторые из них знают, что они проблематичны из-за 0, 10 и т. д. Выход :
5599908 = «пять миллионов пятьсот девяносто девять тысяч девятьсот восемь» 192603486 = «сто девяносто два миллиона шестьсот три тысячи четыреста восемьдесят шесть» 1392431868 = «один миллиард триста девяносто два миллиона четыреста тридцать одна тысяча восемьсот шестьдесят восемь »1023787010 =« один миллиард двадцать три миллиона семьсот восемьдесят семь тысяч десять »1364396236 =« один миллиард триста шестьдесят четыре миллиона триста девяносто шесть тысяч двести тридцать шесть »1511255671 = один миллиард пятьсот одиннадцать миллионов двести пятьдесят пять тысяч шестьсот семьдесят один «225955221 =« двести двадцать пять миллионов девятьсот пятьдесят пять тысяч двести двадцать один »1890141052 =« один миллиард восемьсот девяносто миллионов сто сорок одна тысяча пятьдесят два '261839422 =' два сто шестьдесят один миллион восемьсот тридцать девять тысяч четыреста двадцать два »728428650 =« семьсот двадцать восемь миллионов четыреста двадцать восемь тысяч шестьсот пятьдесят »860607319 =« восемьсот шестьдесят миллионов шестьсот семь тысяч триста девятнадцать »719753587 =« семь сто девятнадцать миллионов семьсот пятьдесят три тысячи пятьсот восемьдесят семь »2063829124 =« два миллиарда шестьдесят три миллиона восемьсот двадцать девять тысяч сто двадцать четыре »1081010996 =« один миллиард восемьдесят один миллион десять тысяч девятьсот девяносто шесть »999215799 =« девять сто девяносто девять миллионов двести пятнадцать тысяч семьсот девяносто девять »2105226236 =« два миллиарда сто пять миллионов двести двадцать шесть тысяч двести тридцать шесть »1431882940 =« один миллиард четыреста тридцать один миллион восемьсот восемьдесят две тысячи девятьсот сорок '1991707241 =' один миллиард девятьсот девяносто один миллион семьсот семь тысяч две сотни форт y one '1088301563 =' один миллиард восемьдесят восемь миллионов триста одна тысяча пятьсот шестьдесят три '964601609 =' девятьсот шестьдесят четыре миллиона шестьсот одна тысяча шестьсот девять '1000 =' одна тысяча '2000 =' две тысячи '10000 = «десять тысяч» 11000 = «одиннадцать тысяч» 999999999 = «девятьсот девяносто девять миллионов девятьсот девяносто девять тысяч девятьсот девяносто девять» 2147483647 = «два миллиарда сто сорок семь миллионов четыреста восемьдесят три тысячи шестьсот сорок семь»
Надеюсь, что это поможет:)
Я реализовал его так:
package com.stack.overflow.number.in.english; import java.util.ResourceBundle; public class ActualImplementation {public static ResourceBundle readPropertyFile = ResourceBundle .getBundle ("NumberEnglishRepresentation"); public static void main (String [] args) {System.out.println (ActualImplementation.main (-2)); } public static String main (Целочисленное число) {int power; // Вычисление числа цифр Целое числоOfDigits = number & gt; 0? (int) Math.log10 ((double) number) + 1: 1; Строковый вывод = ""; // Если число отрицательно, преобразуйте его в положительное значение append минус до // output if (Integer.signum (number) == -1) {output = "минус"; число = число & lt; 0? число * -1: число; } Строка stringVal = String.valueOf (число); if (number & lt; = 20 || number == 30 || number == 40 || number == 50 || number == 60 || number == 70 || number == 80 || number == 90 | | number == 100 || number == 1000) output + = readPropertyFile.getString (stringVal); else {int i; for (i = 0; i & lt; numberOfDigits; i ++) {if (number! = 0) {numberOfDigits = number & gt; 0? (int) Math .log10 ((double) number) + 1: 1; power = (int) Math.pow (10, numberOfDigits - 1); // Если число равно 10 001, то сначала напечатайте десять, а затем // оставшееся значение, если (numberOfDigits & gt; = 5 & amp; & amp; номерOfDigits% 2 == 1) {power = (int) Math.pow (10, numberOfDigits - 2 ); } if (readPropertyFile.containsKey (String.valueOf (number))) output + = readPropertyFile.getString (String .valueOf (number)); else {// Поскольку числа в единицах и десятки места считываются // иначе, если (numberOfDigits & gt; 2) {output + = readPropertyFile.getString (String .valueOf (число / мощность)) + readPropertyFile.getString (String .valueOf ( мощность)); } else {output + = readPropertyFile.getString (String .valueOf (число - число% мощности)); }} number = (int) (количество% мощности); }}} return output; }}
, а файл ресурсов:
0 = ноль 1 = один 2 = два 3 = три 4 = четыре 5 = пять 6 = шесть 7 = семь 8 = восемь 9 = девять 10 = десять 11 = одиннадцать 12 = двенадцать 13 = тринадцать 14 = четырнадцать 15 пятнадцать 16 = шестнадцать 17 = семнадцать 18 = восемнадцать 19 = девятнадцать 20 = двадцать 30 = тридцать 40 = четыредцать 50 = пятьдесят 60 = шестьдесят 70 = семьдесят 80 = восемьдесят 90 = девяносто 100 = сто 1000 = тысяча 100000 = Лах
Этот вариант реализуется до 10 лакхов только
класс NumberToWord {private static Map & lt; Integer, String & gt; numbers = new HashMap & lt; Integer, String & gt; (); private static Set & lt; Integer & gt; numberSet = new TreeSet & lt; Integer & gt; (новый Comparator & lt; Integer & gt; () {public int compare (Integer o1, Integer o2) {return o2 - o1;}}); static {init (); numberSet.addAll (numbers.keySet ()); } public static void main (String [] args) {System.out.println (getNumberInWord (1898765)); } / * * преобразование положительных чисел в число слов формата & gt; 0 only * / static String getNumberInWord (int number) {StringBuilder word = new StringBuilder (); for (Integer n: numberSet) {if (число & gt; 0 & amp; & amp; номер & gt; = n) {int div = число / n; String strNum = numbers.get (div); if (strNum == null) {word.append (getNumberInWord (div)); } // для менее 100, нам не нужно говорить 1, если (strNum! = null & amp; & amp; (div & gt; 1 || n & gt; 100)) word.append (strNum + ""); word.append (numbers.get (n) + ""); число = число% n; }} return word.toString (); } static void init () {numbers.put (0, "Zero"); numbers.put (1, «One»); numbers.put (2, «Two»); numbers.put (3, «Three»); numbers.put (4, "Four"); numbers.put (5, «Five»); numbers.put (6, "Six"); numbers.put (7, «Семь»); numbers.put (8, "Eight"); numbers.put (9, «Девять»); numbers.put (10, «Ten»); numbers.put (11, «Одиннадцать»); numbers.put (12, «Двенадцать»); numbers.put (13, «Тринадцать»); numbers.put (14, «Четырнадцать»); numbers.put (15, «Пятнадцать»); numbers.put (16, "шестнадцать"); numbers.put (17, «Семнадцать»); numbers.put (18, «восемьдесят»); numbers.put (19, «девятнадцать»); numbers.put (20, "Двадцать"); numbers.put (30, «Тридцать»); numbers.put (40, «Сорок»); numbers.put (50, «Пятьдесят»); numbers.put (60, "Sixty"); numbers.put (70, «Семьдесят»); numbers.put (80, "Eighty"); numbers.put (90, "Ninty"); numbers.put (100, «Сто»); numbers.put (1000, «Thousand»); numbers.put (1000000, «Million»); numbers.put (100000000, «Billion»); }}
Возможно, вам это больше не нужно, но я недавно написал класс java для этого. По-видимому, Яник Рочон сделал что-то подобное. Он преобразует числа до 999 Novemdecillion (999 * 10 ^ 60). Это могло бы сделать больше, если бы я знал, что произошло после Novemdecillion, но я готов был бы поспорить, что это не нужно. Просто введите число как строку в центах. Вывод также грамматически корректен.
пакет it.tommasoresti.facebook; class NumbersToWords {private static final Строка ZERO = "ноль"; private static String [] oneToNine = {«один», «два», «три», «четыре», «пять», «шесть», «семь», «высота», «девять»}; частная статическая строка [] tenToNinteen = {«десять», «одиннадцать», «двенадцать», «тринадцать», «четырнадцать», «пятнадцать», «шестнадцать», «семнадцать», «восемнадцать», «девятнадцать»}; частная статическая строка [] десятки = {«десять», «двадцать», «тридцать», «сорок», «пятьдесят», «шестьдесят», «семьдесят», «восемьдесят», «девяносто»}; public static String solution (int number) {if (number == 0) return ZERO; return generate (number) .trim (); } public static String generate (int number) {if (number & gt; = 1000000000) {return generate (число / 1000000000) + «миллиард» + генерировать (число% 1000000000); } else if (number & gt; = 1000000) {return generate (число / 1000000) + "млн." + сгенерировать (число% 1000000); } else if (number & gt; = 1000) {return generate (число / 1000) + "тыс." + сгенерировать (число% 1000); } else if (number & gt; = 100) {return generate (число / 100) + "сто" + сгенерировать (число% 100); } return generate1To99 (число); } private static String generate1To99 (int number) {if (number == 0) return ""; если (число & lt; = 9) возвращает oneToNine [число - 1]; else if (число & lt; = 19) возвращает tenToNinteen [число% 10]; else {вернуть десятки [число / 10 - 1] + "" + generate1To99 (число% 10); }}}
Test
@Test public void given_a_complex_number () throws Exception {assertThat (решение (1234567890), есть («один миллиард двести тридцать четыре миллиона пятьсот шестьдесят семь тысяч высот сто девяносто ")); }
import java.util. *; public class NumberToWord {public void numberToword (int n, String ch) {String one [] = {"", "one", "two", "three", "four", "five", "six", "seven «восемь», «девятка», «десять», «одиннадцать», «двенадцать», «тринадцать», «четырнадцать», «пятнадцать», «шестнадцать», «семнадцать», «восемнадцать», «девятнадцать») ; Строка десять [] = {"", "", "двадцать", "тридцать", "сорок", "пятьдесят", "шестьдесят", "семьдесят", "восемьдесят", "девяносто"}; если (n & gt; 19) {System.out.print (десять [n / 10] + "" + one [n% 10]); } else {System.out.print (один [n]); } if (n & gt; 0) {System.out.print (ch); }} public static void main (String [] args) {int n = 0; Сканер s = новый сканер (System.in); System.out.print ("Введите целочисленное число:"); n = s.nextInt (); if (n & lt; = 0) {System.out.print ("Введите числа больше 0"); } else {NumberToWord a = new NumberToWord (); System.out.print («После номера преобразования в словах:»); a.numberToword ((n / 1000000000), «Сто»); a.numberToword ((n / 10000000)% 100, «crore»); a.numberToword (((n / 100000)% 100), «lakh»); a.numberToword (((n / 1000)% 100), «тысяч»); a.numberToword (((n / 100)% 10), «сто»); a.numberToword ((n% 100), ""); }}}