Java实现汉字金额转化(转自微信)

package com.xfonlineclass;
import java.text.DecimalFormat;
import java.util.Scanner;
/**
* 金额转换
*
* 小峰在线
* http://www.xfonlineclass.com
*/
public class ConvertMoney {
// 大写数字
private final static String[] STR_NUMBER = { "零", "壹", "贰", "叁", "肆", "伍",
"陆", "柒", "捌", "玖" };
private final static String[] STR_UNIT = { "", "拾", "佰", "仟", "万", "拾",
"佰", "仟", "亿", "拾", "佰", "仟" };// 整数单位
private final static String[] STR_UNIT2 = { "角", "分", "厘" };// 小数单位

public static void main(String[] args) {
Scanner scan = new Scanner(System.in);// 创建扫描器
System.out.println("请输入一个金额");
// 获取金额转换后的字符串
String convert = convert(scan.nextDouble());
System.out.println(convert);// 输出转换结果
}

/**
* 获取可数部分
*
* @param num
* 金额
* @return 金额整数部分
*/
public static String getInteger(String num) {
if (num.indexOf(".") != -1) { // 判断是否包含小数点
num = num.substring(0, num.indexOf("."));
}
num = new StringBuffer(num).reverse().toString(); // 反转字符串
StringBuffer temp = new StringBuffer(); // 创建一个StringBuffer对象
for (int i = 0; i < num.length(); i++) {// 加入单位
temp.append(STR_UNIT[i]);
temp.append(STR_NUMBER[num.charAt(i) - 48]);
}
num = temp.reverse().toString();// 反转字符串
num = numReplace(num, "零拾", "零"); // 替换字符串的字符
num = numReplace(num, "零佰", "零"); // 替换字符串的字符
num = numReplace(num, "零仟", "零"); // 替换字符串的字符
num = numReplace(num, "零万", "万"); // 替换字符串的字符
num = numReplace(num, "零亿", "亿"); // 替换字符串的字符
num = numReplace(num, "零零", "零"); // 替换字符串的字符
num = numReplace(num, "亿万", "亿"); // 替换字符串的字符
// 如果字符串以零结尾将其除去
if (num.lastIndexOf("零") == num.length() - 1) {
num = num.substring(0, num.length() - 1);
}
return num;
}

/**
* 获取小数部分
*
* @param num
* 金额
* @return 金额的小数部分
*/
public static String getDecimal(String num) {
// 判断是否包含小数点
if (num.indexOf(".") == -1) {
return "";
}
num = num.substring(num.indexOf(".") + 1);
// 反转字符串
num = new StringBuffer(num).reverse().toString();
// 创建一个StringBuffer对象
StringBuffer temp = new StringBuffer();
// 加入单位
for (int i = 0; i < num.length(); i++) {
temp.append(STR_UNIT2[i]);
temp.append(STR_NUMBER[num.charAt(i) - 48]);
}
num = temp.reverse().toString(); // 替换字符串的字符
num = numReplace(num, "零角", "零"); // 替换字符串的字符
num = numReplace(num, "零分", "零"); // 替换字符串的字符
num = numReplace(num, "零厘", "零"); // 替换字符串的字符
num = numReplace(num, "零零", "零"); // 替换字符串的字符
// 如果字符串以零结尾将其除去
if (num.lastIndexOf("零") == num.length() - 1) {
num = num.substring(0, num.length() - 1);
}
return num;
}

/**
* 替换字符串中内容
*
* @param num
* 字符串
* @param oldStr
* 被替换内容
* @param newStr
* 新内容
* @return 替换后的字符串
*/
public static String numReplace(String num, String oldStr, String newStr) {
while (true) {
// 判断字符串中是否包含指定字符
if (num.indexOf(oldStr) == -1) {
break;
}
// 替换字符串
num = num.replaceAll(oldStr, newStr);
}
// 返回替换后的字符串
return num;
}

/**
* 金额转换
*
* @param d
* 金额
* @return 转换成大写的全额
*/
public static String convert(double d) {
// 实例化DecimalFormat对象
DecimalFormat df = new DecimalFormat("#0.###");
// 格式化double数字
String strNum = df.format(d);
// 判断是否包含小数点
if (strNum.indexOf(".") != -1) {
String num = strNum.substring(0, strNum.indexOf("."));
// 整数部分大于12不能转换
if (num.length() > 12) {
System.out.println("数字太大,不能完成转换!");
return "";
}
}
String point = "";// 小数点
if (strNum.indexOf(".") != -1) {
point = "元";
} else {
point = "元整";
}
// 转换结果
String result = getInteger(strNum) + point + getDecimal(strNum);
if (result.startsWith("元")) { // 判断是字符串是否已"元"结尾
result = result.substring(1, result.length()); // 截取字符串
}
return result; // 返回新的字符串
}
}

  

原文地址:https://www.cnblogs.com/cmpblog/p/9393343.html

时间: 2024-10-08 10:30:26

Java实现汉字金额转化(转自微信)的相关文章

java AES加密拿来即用,实行对汉字的转化

package com.tr.common.util.encrypt; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.security.Security; import javax.crypto.BadPaddingException; import javax.crypt

java保存汉字到mysal乱码

java存数据到mysql java保存前汉字正常显示,到mysql乱码 直接在小海豚上(sqlyog)修改,网上很多人都说在dos里写语句神马的,弄了一圈也不管用,还麻烦,最后发现直接工具就能修改 1,该数据库 2.表 把字符集改为utf8就可以了 3.如果还不行,至多把mysql安装文件下my.ini文件里default-character-set = utf8和character-set-server = utf8修改了就可以了 4.完事 java保存汉字到mysal乱码,布布扣,bubu

java将汉字转成拼音

package com.jframe.kit; import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType; import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat; import net.sourceforge.pinyin4j.format.HanyuPinyinToneTy

Java 解析汉字拼音

需要java包 :pinyin4j-2.5.0.jar pinyin4j的使用很方便,一般转换只需要使用PinyinHelper类的静态工具方法即可: String[] pinyin = PinyinHelper.toHanyuPinyinStringArray('赵'); //该类还有其他的拼音转换形式,但是基本上用不到,就不介绍了 返回的数组即是该字符的拼音,如上例就是pinyin[0]=zhao,后面的数字代表声调,声调为5表示轻读,无声调.之所谓返回数组,是因为被判定的汉字有可能有多个读

solr和java时区时间日期转化方法

我们一般得到的时间为当地时区的时间,而我存储到服务器上时想得到格林威治时间(GMT)和世界协调时间(UTC).一种是通过时间差计算:目标时区时间+时区差=本时区的时间.另一种则是通过设置时区不过要调用set方法,在多线程情况下调用set会发生错误,所以最好使用第一种: 第一种代码: package com; import java.text.SimpleDateFormat; import java.util.Date; import java.util.TimeZone; public cla

数字金额转汉字金额

早上公交上总想这个问题,终于写出来了,不知道有错误没 1 $chinese = array("零","一","二","三","四","五","六","七","八","九"); 2 $str = 140032002005; 3 $arr = array(); 4 5 $num = floor(strlen($s

《java中把金额以3位分开的计数法》

     String str1 = "123456789";   str1 = new StringBuilder(str1).reverse().toString();     //先将字符串颠倒顺序   String str2 = "";   for(int i=0;i<str1.length();i++){    if(i*3+3>str1.length()){     str2 += str1.substring(i*3, str1.lengt

java实现汉字字典

环境:eclipsse, jdk1.6, 没有使用第三方的包,都是JDK有的. 注意,项目源文件我都使用的是UTF-8的编码格式,如果不是,代码里面的汉字注释会显示乱码. 设置UTF-8:windows->Preferences->General->Workspace 页面上Text file encoding,选择Other UTF-8 项目结构: 1.字典文件 dic.txt 下载地址:http://download.csdn.net/detail/wssiqi/5056993 这里

自定义类库:Java转换xml文件转化pojo工具

一.之前java读取xml配置文件时,总是通过dom4j第三方库主动解析,最近发现可以通过jdk类库将xml转换pojo. 二.编写xml转化工具类XmlUtils package com.moy.demo.common.utils; import javax.xml.bind.JAXBContext; import javax.xml.bind.Unmarshaller; import java.io.InputStream; import java.io.Reader; import jav