Java 实现数字到字符串程序的另一种有效方法是什么
考虑到约束条件Java 实现数字到字符串程序的另一种有效方法是什么,java,Java,考虑到约束条件1,我已经编写了一个将数字转换为单词的代码,如图所示,Java中没有任何方法可以为您这样做 您可以做的是尝试创建一个方法,为数字生成字符串 因此,此方法将具有表示每个数字所需的所有字符串: zero - nine, ten, twenty, thirty , hundred, thousand, [m-b-tr-quad..]illion eleven, twelve, thirteen and negative 14 - 19 => [4-9] + teen 30 -
1,我已经编写了一个将数字转换为单词的代码,如图所示,Java
中没有任何方法可以为您这样做
您可以做的是尝试创建一个方法,为数字生成字符串
因此,此方法将具有表示每个数字所需的所有字符串:
zero - nine, ten, twenty, thirty , hundred, thousand, [m-b-tr-quad..]illion
eleven, twelve, thirteen and negative
14 - 19 => [4-9] + teen
30 - 90 => [3-9] + ty
10^6 - 10^3n => [m for 10^6, b for 10^9] + illion
您必须删除重叠的t
s
即
是80
而不是8
我刚刚创建了一个适用于-100000000
的程序。
很抱歉耽搁了,但我想确保它工作正常
代码
import java.util.HashMap;
导入java.util.Iterator;
导入java.util.Map.Entry;
导入java.util.regex.Matcher;
导入java.util.regex.Pattern;
公共类编号转换{
公共静态最终int MAX_NUMBER=99999999;//高达近10亿
公共静态最终哈希图编号;
公共静态最终HashMap模式;
公共静态最终字符串负=“负”;
公共静态最终字符串ZERO=“ZERO”;
静止的{
数字=新的HashMap();
数字。将(0,“);
数字。放入(1,“一”);
数字。放入(2,“2”);
数字。放入(3,“三”);
数字。放入(4,“4”);
数字。放入(5,“5”);
数字。放入(6,“6”);
数字。放入(7,“7”);
数字。放入(8,“8”);
数字。放入(9,“9”);
数字。放入(10,“10”);
数字。放入(11,“11”);
数字。放入(12,“12”);
(13,“十三”);
数字。放(15,“15”);
patterns=newhashmap();
“1[4-9],“[]青少年”);
模式。把(“2”,“20”);
模式。把(“3.”,“30”);
模式。put(“[4-9]。”,“[]ty”);
模式。投入(“[1-9]……”,“[]百”);
模式。put(“[0-9]{1,3}…”,“[]千”);
模式。投入(“[0-9]{1,3}……”,“[]百万”);
}
公共静态字符串getValue(整数){
返回编号!=0?getValue(String.valueOf(number)):“零”;
}
公共静态字符串getValue(字符串编号){
//验证
int parsed=Integer.parseInt(数字);
如果(已解析>最大值){
抛出新的IllegalArgumentException(“数字:“+number+””太大,无法转换。”);
}
if(解析<0){
返回负值+getValue(number.substring(1));
}
//如果数字映射中存在该数字,请按原样返回。
if(number.containsKey(已解析)){
返回数字。获取(解析);
}
StringBuilder结果=新建StringBuilder();//返回的字符串
迭代器迭代器=patterns.entrySet().Iterator();
while(iterator.hasNext()){
String key=iterator.next().getKey();
Pattern=Pattern.compile(键);
匹配器匹配器=模式匹配器(编号);
if(matcher.matches()){
int index=key.indexOf('.');
字符串温度;
如果(索引18,第八个->第八十个
返回result.toString().replace(“tt”,“t”);
}
公共静态void main(字符串[]args){
System.out.println(getValue(312321));
}
}
如果您想添加模式。put(“[0-9]{1,3}………”,“[]十亿”);
您必须将每个int
更改为long
,如图所示,Java
中没有为您执行此操作的方法
您可以做的是尝试创建一个方法,为数字生成字符串
因此,此方法将具有表示每个数字所需的所有字符串:
zero - nine, ten, twenty, thirty , hundred, thousand, [m-b-tr-quad..]illion
eleven, twelve, thirteen and negative
14 - 19 => [4-9] + teen
30 - 90 => [3-9] + ty
10^6 - 10^3n => [m for 10^6, b for 10^9] + illion
您必须删除重叠的t
s
即
是80
而不是8
我刚刚创建了一个适用于-100000000
的程序。
很抱歉耽搁了,但我想确保它工作正常
代码
import java.util.HashMap;
导入java.util.Iterator;
导入java.util.Map.Entry;
导入java.util.regex.Matcher;
导入java.util.regex.Pattern;
公共类编号转换{
公共静态最终int MAX_NUMBER=99999999;//高达近10亿
公共静态最终哈希图编号;
公共静态最终HashMap模式;
公共静态最终字符串负=“负”;
公共静态最终字符串ZERO=“ZERO”;
静止的{
数字=新的HashMap();
数字。将(0,“);
数字。放入(1,“一”);
数字。放入(2,“2”);
数字。放入(3,“三”);
数字。放入(4,“4”);
数字。放入(5,“5”);
数字。放入(6,“6”);
数字。放入(7,“7”);
数字。放入(8,“8”);
数字。放入(9,“9”);
数字。放入(10,“10”);
数字。放入(11,“11”);
数字。放入(12,“12”);
(13,“十三”);
数字。放(15,“15”);
patterns=newhashmap();
“1[4-9],“[]青少年”);
模式。把(“2”,“20”);
模式。把(“3.”,“30”);
模式。put(“[4-9]。”,“[]ty”);
模式。投入(“[1-9]……”,“[]百”);
模式。put(“[0-9]{1,3}…”,“[]千”);
模式。投入(“[0-9]{1,3}……”,“[]百万”);
}
公共静态字符串getValue(整数){
返回编号!=0?getValue(String.valueOf(number)):“零”;
}
公共静态字符串getValue(字符串编号){
//验证
int parsed=Integer.parseInt(数字);
如果(已解析>最大值){
抛出新的IllegalArgumentException(“数字:“+number+””太大,无法转换。”);
}
如果(PAR)
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class NumberConversion {
public static final int MAX_NUMBER = 999999999;// up to almost 1 billion
public static final HashMap<Integer, String> numbers;
public static final HashMap<String, String> patterns;
public static final String NEGATIVE = "Minus ";
public static final String ZERO = "Zero";
static {
numbers = new HashMap<Integer, String>();
numbers.put(0, "");
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, "Seven");
numbers.put(8, "Eight");
numbers.put(9, "Nine");
numbers.put(10, "Ten");
numbers.put(11, "Eleven");
numbers.put(12, "Twelve");
numbers.put(13, "Thirteen");
numbers.put(15, "Fifteen");
patterns = new HashMap<String, String>();
patterns.put("1[4-9]", "[]teen ");
patterns.put("2.", "Twenty ");
patterns.put("3.", "Thirty ");
patterns.put("[4-9].", "[]ty ");
patterns.put("[1-9]..", "[] Hundred ");
patterns.put("[0-9]{1,3}...", "[] Thousand ");
patterns.put("[0-9]{1,3}......", "[] Million ");
}
public static String getValue(int number) {
return number != 0 ? getValue(String.valueOf(number)) : "Zero";
}
public static String getValue(String number) {
// Validation
int parsed = Integer.parseInt(number);
if (parsed > MAX_NUMBER) {
throw new IllegalArgumentException("The number: '" + number + "' is too large to be converted.");
}
if (parsed < 0) {
return NEGATIVE + getValue(number.substring(1));
}
// If the number exists in the numbers map, return it as is.
if (numbers.containsKey(parsed)) {
return numbers.get(parsed);
}
StringBuilder result = new StringBuilder();// The returned string
Iterator<Entry<String, String>> iterator = patterns.entrySet().iterator();
while (iterator.hasNext()) {
String key = iterator.next().getKey();
Pattern pattern = Pattern.compile(key);
Matcher matcher = pattern.matcher(number);
if (matcher.matches()) {
int index = key.indexOf('.');
String temp;
if (index <= 0) {
index = key.indexOf('[');
temp = number.substring(index);
} else {
int size = key.length() - index;
index = number.length() - size;
temp = number.substring(0, index);
}
String string = patterns.get(key);
number = number.substring(index);
result.append(string.replace("[]", getValue(temp)));
}
}
if (number != "") {
/*
* In the event of having a number like 121. The output will be 120
* and the variable number will still hold the 1.
*/
result.append(getValue(number));
}
// Eightten -> Eighteen, Eightty -> Eighty
return result.toString().replace("tt", "t");
}
public static void main(String[] args) {
System.out.println(getValue(312321));
}
}