- 人民币金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出
- 判断身份证:要么是15位,要么是18位,最后一位可以为字母,并写程序提出其中的年月日。
- 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个,如“我ABC”,4,应该截取“我AB”,输入“我ABC汉DEF”,6,应该输出“我ABC”,而不是“我ABC+汉的半个”。
- 给定一个四句古诗,程序实现从每一句中随机挖去一个字,并顺序打乱生成四个选项。从而随机生成一个填字题目。
- 统计一篇英文文章中单词个数
- 给定任意长度的字符串,字符串中可以有任意顺序和任意个数的任意字符。要求去除重复只留下唯一的字符并升序排序。比如:aabbxxcaaccyyxxxyydddd 输出结果为:abcdxy
- 全排列:给出五个数字 12345 的所有排列
- 回文素数:所谓回文数就是顺着读和倒着读一样的数(例如:11,121,1991…),回文素数就是既是回文数又是素数(只能被 1 和自身整除的数)的数。编程找出11~9999 之间的回文素数。
- 给一个任意的字符串,如果统计出每个字符出现的次数?
- 有一串无序的任意序列字符串,包含了一些特殊字符,现在需要去除特殊字符,只留下数字字母下划线。
- 写一个算法判断一个英文单词的所有字母是否全都不同(不区分大小写)
- 一个有 n 级的台阶,一次可以走 1 级、2 级或 3 级,问走完 n 级台阶有多少种走法。
- 编写一个程序,统计文本文件中内容的总行数?
人民币转换
1. 人民币金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出。
思路:
人民币从阿拉伯数字转为大写中文,这就需要首先解决 0~9 到 壹~玖之间的映射。
这种映射,可以通过数组来解决即可。
而还有要考虑的问题是,元拾佰仟的转换问题。这个可以结合数组及位数来实现。每多一位则从数组中依次往后取出单位拼接到结果字符串中。
package test;
public class RenMingBi {
private static final char[] data = new char[]{
'零','壹','贰','叁','肆','伍','陆','柒','捌','玖' };
private static final char[] units = new char[]{
'元','拾','佰','仟','万','拾','佰','仟','亿'};
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(
convert(100000003));
}
public static String convert(int money)
{
StringBuffer sbf = new StringBuffer();
int unit = 0;
while(money!=0)
{
sbf.insert(0,units[unit++]);
int number = money%10;
sbf.insert(0, data[number]);
money /= 10;
}
return sbf.toString().replaceAll("零[拾佰仟]","零")
.replaceAll("零+万","万")
.replaceAll("亿万","亿")
.replaceAll("零+元","元")
.replaceAll("零+","零");
}
}
字符串、正则表达式等其他问题
2. 判断身份证:要么是15位,要么是18位,最后一位可以为字母,并写程序提出其中的年月日。
思路:
首先需要了解正则表达式,\d 表示数字。{n,m}表示字符个数。
可以使用正则表达式从第6位之后开始截取 8 位即可取出年月日。
package com.demo2;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexTest {
public static void main(String[] args) {
// 测试是否为合法的身份证号码
String[] strs = {
"130681198712092019", "13068119871209201x", "13068119871209201", "123456789012345",
"12345678901234x", "1234567890123" };
Pattern p1 = Pattern.compile("(\\d{17}[0-9a-zA-Z]|\\d{14}[0-9a-zA-Z])");
for (int i = 0; i < strs.length; i++) {
Matcher matcher = p1.matcher(strs[i]);
System.out.println(strs[i] + ":" + matcher.matches());
}
Pattern p2 = Pattern.compile("\\d{6}(\\d{8}).*"); // 用于提取出生日字符串
Pattern p3 = Pattern.compile("(\\d{4})(\\d{2})(\\d{2})");// 用于将生日字符串进行分解为年月日
for (int i = 0; i < strs.length; i++) {
Matcher matcher = p2.matcher(strs[i]);
boolean b = matcher.find();
if (b) {
String s = matcher.group(1);
Matcher matcher2 = p3.matcher(s);
if (matcher2.find()