1.按照取子字符串,中文占两个字节,英文占一个字节
package practice;
public class substring{
public static String getSubstring(String s, int start, int end){
String r = new String(s);
String result = "";
int leneed = end - start;
int length = 0;
int i = start;
if(r.length() == r.getBytes().length)
return s.substring(start, end);
else{
while(i<end && length <= leneed){
if(isHan(r.charAt(i))){
length += 2;
}
else{
length += 1;
}
result = result + r.charAt(i);
i += 1;
}
return result;
}
}
public static boolean isHan(char a){
return a >= 0x4E00 && a <= 0x9FA5;
}
public static void main(String[] args){
String test = "中a国bc中国中国";
System.out.println(getSubstring(test, 1, 10));
}
}
tip: 通过a >= 0x4E00 && a <= 0x9FA5;
来判断一个字符是否为中文
2.把浮点数字表示的钱的数量用中文读法来表示
public class Change{
private static String[] nums = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
private static String[] units = {"", "拾", "佰", "仟", "万"}; //"个"用来充数
public static String ChangeTo(double s){
int intpart = (int)s;
double depart = s - intpart;
String result = "";
String r1 = DealInt(intpart);
String r2 = DealDe(depart);
return result = result + r1 + "元" + r2;
}
public static String DealInt(int intpart){
String s = "" + intpart;
String r = "";
int size = s.length();
int unit = size; //用来计算单位的索引
for(int i = 0; i < size; i++){
int num = s.charAt(i) - 48;
if(num != 0) {
r = r + nums[num] + units[(unit-1)%4];
}
else if(r.charAt(r.length()-1) != '零') {
r = r + "零";
}
if(unit == 5) {
if(r.charAt(r.length()-1) == '零') r = r.substring(0, r.length()-1) + "万";
else r = r + "万";
}
unit = unit - 1;
}
if(r.charAt(r.length()-1) == '零') return r.substring(0, r.length()-1);
else return r;
}
public static String DealDe(double depart){
String s = "" + depart;
String r = "";
if(s.charAt(2) != '0') r = r + nums[s.charAt(2)-48] + "角";
if(s.charAt(3) != '0') r = r + nums[s.charAt(3)-48] + "分";
return r;
}
public static void main(String[] args) {
double s = 40520562.253;
System.out.println(ChangeTo(s));
}
}
tip: 不能用(int)
来把char类型强制装换为整数,要通过char - 48
才能得到正确结果