1. 括号配对问题:
package com.util;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 括号配对问题: 现在,有一行括号序列,请你检查这行括号是否配对。
*
* 输入: 第一行输入一个数N(0i; j--) {
char ele_op = source.charAt(j);
if ((ele == char1 && ele_op == char2) || (ele == char3 && ele_op == char4)) {
String subStr = source.substring(i + 1, j);
if ((subStr == null || subStr.length() == 0) || isMatchKuohao(subStr)) {
flag = true;
i = j + 1;
break;
}
}
}
if (!flag) {
return false;
}
}
return true;
}
}
2. 人民币转换问题
校验结果正确与否,参照在线转换器: http://link.fobshanghai.com/rmb.htm
package com.util;
import java.util.HashMap;
import java.util.Map;
public class TestAmount {
public static final String zero = "零";
public static final String[] nums = new String[] { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
public static final String[] unit_one = new String[] { "", "拾", "佰", "仟" };
public static final String[] unit_two = new String[] { "", "万", "亿" };
public static void main(String[] args) {
String amount = convertAmount("90001010436.10");
System.out.println(amount);
}
public static String convertAmount(String source) {
StringBuilder sb = new StringBuilder();
sb.append("人民币");
if (source.indexOf(".") > 0) {
String[] strArr = source.split("\\.");
if (strArr.length == 2) {
long number1 = Long.parseLong(strArr[0]);
int number2 = Integer.parseInt(strArr[1]);
sb.append(convertIntAmount(number1));
sb.append("元");
sb.append(convertFloatAmount(number2));
}
} else {
long number = Long.parseLong(source);
sb.append(convertIntAmount(number));
sb.append("元整");
}
return sb.toString();
}
public static StringBuilder convertFloatAmount(int number) {
StringBuilder sb = new StringBuilder();
int jiao = number / 10;
int fen = number % 10;
if (jiao > 0) {
sb.append(nums[jiao]);
sb.append("角");
}
if (fen > 0) {
sb.append(nums[fen]);
sb.append("分");
}
return sb;
}
public static String convertIntAmount(long number) {
if((number + "").length() > 11){
throw new IllegalArgumentException("金额过大,应小于1000亿元!");
}
StringBuilder sb = null;
int pointer = 0;
boolean isLastZero = false;
do {
int result = (int) (number % 10000);
number = number / 10000;
MapresultMap = calRemainder(result, (number > 0), isLastZero);
StringBuilder remainder = (StringBuilder) resultMap.get("remainderStr");
isLastZero = (resultMap.get("isFirstZero") != null) && (Boolean) resultMap.get("isFirstZero");
if (remainder.length() != 0) {
if (!(remainder.length() == 1 && zero.equals(remainder.toString()))) {
remainder.append(unit_two[pointer]);
}
} else {
if (!isLastZero) {
remainder.append(zero);
}
}
if (sb != null) {
remainder.append(sb);
}
sb = remainder;
pointer++;
} while (number > 0);
return sb.toString();
}
public static MapcalRemainder(int number, boolean isContinue, boolean isLastRemainderZero) {
StringBuilder sb = new StringBuilder();
int beginVal = 1000;
int pointer = 3;
int flag;
boolean isLastZero = false;
MapresultMap = new HashMap();
do {
flag = number / beginVal;
// 只有前面还有更大的单位、并且不连续补零、并且上次的余数首位不为零的情况下才补上零
if (flag != 0) {
sb.append(nums[flag]);
sb.append(unit_one[pointer]);
isLastZero = false;
} else {
if (isLastRemainderZero && number == 0) {
isLastZero = true;
}
if (!isLastZero && isContinue) {
sb.append(zero);
isLastZero = true;
}
if (pointer == 3) {
resultMap.put("isFirstZero", isLastZero);
}
}
number = number % beginVal;
pointer--;
beginVal /= 10;
} while (number > 0);
resultMap.put("remainderStr", sb);
return resultMap;
}
}