/*
* 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);
}
}