阿拉伯数字转韩文、中文

/*
 *  Author: @九成宫醴泉铭 
 *  微信公众平台:huanhuacf(幻化成风)
 *  微信:2992860292, QQ同号
 *
 */

import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.StringTokenizer;

import javax.swing.JButton;
import javax.swing.JFrame;
import java.awt.FlowLayout;
import java.awt.Font;

import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;

class UserInterface extends JFrame {
	private static TextField inputTextField; // 用来输入阿拉伯数字的的文本框
	private final TextField outputTextField;// 显示结果的文本框
	private final JButton clearButton;// 清空inputTextField文本框中内容的button
	private final JButton reverseButton;// 将输入框与输出框内容倒置
	private final JButton toChinese;// 阿拉伯数字转中文键
	private final JButton toHangul;// 阿拉伯数字转韩文键
	private final JButton hangulToNum;// 韩文转阿拉伯数字键
	private final JButton copyButton;// 点击copyButton键,复制结果到剪贴板
	private String defaultContentForInputTextField = "";// 设置输入框的默认内容为空
	private Clipboard clipbd = getToolkit().getSystemClipboard();

	public UserInterface() {
		super("阿拉伯数字转韩文@微信公众平台 : "幻化成风"");
		setLayout(new FlowLayout());

		inputTextField = new TextField("在此处输入要转换的内容", 80);
		inputTextField.setFont(new Font("宋体", 22, 22));
		add(inputTextField);

		clearButton = new JButton("清空");
		add(clearButton);

		outputTextField = new TextField("", 80);
		outputTextField.setFont(new Font("宋体", 22, 22));
		add(outputTextField);

		reverseButton = new JButton("倒置");
		add(reverseButton);

		toHangul = new JButton(">>일이삼");
		add(toHangul);

		toChinese = new JButton(">>一二三");
		add(toChinese);

		hangulToNum = new JButton("일=>>1");
		add(hangulToNum);

		copyButton = new JButton("复制结果到剪贴板");
		add(copyButton);

		Handler1 handler1 = new Handler1(); // clearButton的监听器, 清空inputTextField文本框的内容
		clearButton.addActionListener(handler1);

		Handler2 handler2 = new Handler2();// copyButton的监听器,复制输出框的内容到剪贴板
		copyButton.addActionListener(handler2);

		Handler3 handler3 = new Handler3();// toHangul的监听器,实现阿拉伯数字转韩文
		toHangul.addActionListener(handler3);

		Handler4 handler4 = new Handler4();// hangulToNum的监听器,实现韩文转阿拉伯数字
		hangulToNum.addActionListener(handler4);

		Handler5 handler5 = new Handler5();// toChinese的监听器,实现阿拉伯数字转中文
		toChinese.addActionListener(handler5);

		Handler6 handler6 = new Handler6();
		reverseButton.addActionListener(handler6);
	}

	private class Handler1 implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent event) {
			inputTextField.setText(defaultContentForInputTextField);// 注册clearButton的监听器,清空输入框的内容
		}
	}

	private class Handler2 implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent event) {
			StringSelection clipString = new StringSelection(outputTextField.getText());
			clipbd.setContents(clipString, clipString);// 注册copyButton的监听器,将输出框的内容复制到剪贴板
		}
	}

	private class Handler3 implements ActionListener {
		/*
		 * convertHangul 方法将阿拉伯数字转换为韩文
		 */
		public String convertHangul(String input) {
			String[] han1 = { "영", "일", "이", "삼", "사", "오", "육", "칠", "팔", "구" };// note here
			String[] han2 = { "", "십", "백", "천" };
			String[] han3 = { "", "만", "억", "조", "경" };

			StringBuffer result = new StringBuffer();
			int len = input.length();
			for (int i = len - 1; i >= 0; i--) {
				result.append(han1[Integer.parseInt(input.substring(len - i - 1, len - i))]);
				if (Integer.parseInt(input.substring(len - i - 1, len - i)) > 0)
					result.append(han2[i % 4]);
				if (i % 4 == 0)
					result.append(han3[i / 4]);
			}
			String str = result.toString();

			/*
			 * 下列代码块实现将结果中除了最后一个"일"全部去掉
			 */
			boolean flag = false;
			if (str.charAt(str.length() - 1) == '일')
				flag = true;
			str = str.replaceAll("일", "");
			if (flag == true)
				str += "일";

			/*
			 * 如果结果不是"영"一个字符, 而是含有多个字符, 去掉其中所有的"영"
			 */
			if (str.contains("영"))
				if (str.length() > 1)
					str = str.replaceAll("영", "");

			return str;

		}

		@Override
		public void actionPerformed(ActionEvent event) {
			String result = new Handler3().convertHangul(inputTextField.getText());
			outputTextField.setText(result);
		}
	}

	private class Handler4 implements ActionListener {
		public long hangulToNum(String input) {
			long result = 0;
			long tmpResult = 0;
			long num = 0;

			final String NUMBER = "영일이삼사오육칠팔구";
			final String UNIT = "십백천만억조";
			final long[] UNIT_NUM = { 10, 100, 1000, 10000, (long) Math.pow(10, 8), (long) Math.pow(10, 12) };

			StringTokenizer st = new StringTokenizer(input, UNIT, true);// 단위
			while (st.hasMoreTokens()) {// 삼,*,*,삼,*,*
				String token = st.nextToken();
				// 숫자인지 단위(UNIT)인지 확인한다.
				int check = NUMBER.indexOf(token);// 1)삼 ->3 2)십 ->-1
				System.out.println("CHECK:" + check);

				if (check == -1) {// 단위인경우
					if ("만억조".indexOf(token) == -1) {// 만억조가 아니면 3)만
						tmpResult += (num != 0 ? num : 1) * UNIT_NUM[UNIT.indexOf(token)];// num=30 * 10000
					} else {
						// 만,억,조 경우 ->result
						tmpResult += num;
						result += (tmpResult != 0 ? tmpResult : 1) * UNIT_NUM[UNIT.indexOf(token)];
						tmpResult = 0;
					}
					num = 0;
				} else {// 숫자
					num = check;
				}
			}
			System.out.println("result:" + result);
			System.out.println("tmpResult:" + tmpResult);
			System.out.println("num:" + num);

			return result + tmpResult + num;
		}

		@Override
		public void actionPerformed(ActionEvent event) {
			long result = new Handler4().hangulToNum(inputTextField.getText());
			if (result != 0) {
				String str = "";
				str += result;
				outputTextField.setText(str);
			} else
				outputTextField.setText("0");
		}
	}

	private class Handler5 implements ActionListener {
		public String toChinese(String input) {
			String[] ch = { "零", "一", "二", "三", "四", "五", "六", "七", "八", "九" };
			String[] ch1 = { "", "十", "百", "千" };
			String[] ch2 = { "", "万", "亿" };

			StringBuffer result = new StringBuffer();
			int len = input.length();
			for (int i = len - 1; i >= 0; i--) {
				result.append(ch[Integer.parseInt(input.substring(len - i - 1, len - i))]);
				if (Integer.parseInt(input.substring(len - i - 1, len - i)) > 0)
					result.append(ch1[i % 4]);
				if (i % 4 == 0)
					result.append(ch2[i / 4]);
			}
			String realResult = result.toString();

			if (realResult.charAt(0) == '一' && realResult.charAt(1) == '十')// 中文数字读法中第一个"一"不读出来
				realResult = realResult.substring(1, realResult.length());

			if (realResult.charAt(realResult.length() - 1) == '零')// 最后一个零去掉(例如,20读作"二十",而非"二十零")
				if (realResult.length() > 1)// 如果输入值为0,输出值将为"零", 此时"零"为最后一个零,但不应该被去掉
					realResult = realResult.substring(0, realResult.length() - 1);
			if (realResult.contains("零万"))
				realResult = realResult.replace("零万", "万");
			if (realResult.contains("零亿"))
				realResult = realResult.replace("零亿", "亿");
			return realResult;
		}

		@Override
		public void actionPerformed(ActionEvent event) {
			String result = new Handler5().toChinese(inputTextField.getText());
			outputTextField.setText(result);
		}
	}

	private class Handler6 implements ActionListener {
		/*
		 * 实现将输入框和输出框中的内容倒置
		 */
		@Override
		public void actionPerformed(ActionEvent event) {
			String str = inputTextField.getText();
			inputTextField.setText(outputTextField.getText());
			outputTextField.setText(str);
		}
	}
}

public class 阿拉伯数字转韩文 {
	public static void main(String[] args) {
		UserInterface tr = new UserInterface();
		tr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		tr.setSize(1100, 210);
		tr.setVisible(true);
	}
}
苟利国家生死以, 岂因祸福避趋之
原文地址:https://www.cnblogs.com/chintsai/p/10117061.html