• 阿拉伯数字转韩文、中文


    /*
     *  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);
    	}
    }
    
    苟利国家生死以, 岂因祸福避趋之
  • 相关阅读:
    智能家居测试思路
    Linux中,&和&&,|和||
    Eclipse设置保存代码时自动格式化代码
    Eclipse常用快捷键
    Eclipse设置快捷出现函数
    Eclipse设置代码背景色
    PDF转换成Word后乱码怎么办?
    Able2Extract快捷键汇总整理
    安装并激活Parallels Desktop商业版
    想在Mac上使用CAD?
  • 原文地址:https://www.cnblogs.com/chintsai/p/10117061.html
Copyright © 2020-2023  润新知