Java常用数据类型处理类
**
1、从命令行参数中得到一个字符串,统计该字符串中字母a的出现次数
** 代码如下:
public class exam_1 { public static void main(String[] args) { // TODO Auto-generated method stub String s=args[0]; //从命令行输入(run->run configurations->Arguments) int count=0; for(int i=0;i<s.length();i++) { if(s.charAt(i)=='a') //charAt(int index)用于获取字符串的第index索引个字符 count++; } System.out.print("从命令行参数得到的字符串中,字母a出现的次数为:"+count); } }2、从键盘输入若干行文字,最后输入的一行“end”代表结束标记 (1)统计该段文字中英文字母的个数。 (2)将其中的所有英文单词the全部改为a,输出结果 (3)将该段文字的所有数字串找出来输出。 代码如下:
import java.util.Scanner; public class exam_2 { public static void main(String[] args) { // TODO Auto-generated method stub int count=0; //统计该段文字中的英文字母个数 StringBuffer sbf=new StringBuffer(); //存放单词the改为a后的字符串 Scanner scan=new Scanner(System.in); //扫描输入 String str=scan.nextLine(); while(!str.equals("end")) { for(int i=0;i<str.length();i++) { if(Character.isLetter(str.charAt(i))) count++; } sbf.append(str.replaceAll("the", "a")+"\n"); str=scan.nextLine(); } System.out.println("英文字母个数:"+count); System.out.println("所有单词the替换成a后的结果:"); System.out.println(sbf); String s=sbf.toString(); s=s.replaceAll("[^0-9]+", ";"); if(s.charAt(0)==';') s=s.substring(1); //String[] ss=s.split(";"); System.out.println("该段文字中所有数字串:"+java.util.Arrays.deepToString(s.split(";"))); } }运行效果如下: 注意: 1.字符串本身是一个对象,所以比较时可以用equal()方法; 2. 判断一个字符是否是英文字母可以用Character.isLetter(char ch),比常用的是否在a-z或A-Z内更方便,类似的还有Character.isDigit(char ch)判断字符是否为数字; 3. String类不能改变串对象中的内容,只能通过建立一个新串来实现串的变化,而创建对象过多既浪费内存,效率又低;而StringBuffer类就可以实现字符串内容的添加、修改和删除,一个String类转化为StringBuffer类,可以用StringBuffer(String str)方法,而StringBuffer类转化为String只需调用toString()方法。 4. s.split(";")得到的是一个字符串数组,不能直接输出,需要调用java.util.Arrays.deepToString方法,而和java.util.Arrays.ToString的区别在于:Arrays.deepToString()用于数组中还有数组的情况,而Arrays.toString()则就是用于一维的简单数组,当数组中有数组用Arrays.toString()时,不会打印出数组中的内容,只会以地址的形式打印出来。 5. replaceAll()方法用于后者替代前者正则表达式匹配到的字符串,而replace用于的字符的替换
3、编写一个简易的加密处理程序,从键盘输入一段英文文字,将其中的每个字母用其后的第4个字母代替,最后的字母轮回到前面去数。其他字符不变。
import java.util.Scanner; public class exam_5 { public static void main(String[] args) { // TODO Auto-generated method stub System.out.print("请输入明文:"); Scanner scan = new Scanner(System.in); String str = scan.nextLine(); StringBuffer sbf =new StringBuffer(); for (int i = 0; i < str.length(); i++) { if (Character.isLetter(str.charAt(i))) { if (str.charAt(i) >= 'a' && str.charAt(i) <= 'z') sbf.append( (char) ('a' + (str.charAt(i) - 'a' + 4) % 26)); else if (str.charAt(i) >= 'A' && str.charAt(i) <= 'Z') sbf.append( (char) ('A' + (str.charAt(i) - 'A' + 4) % 26)); } else sbf.append(str.charAt(i)); } System.out.print("加密后的结果为:"); System.out.println(sbf); } }注: 1.String类中的replace或replaceAll方法都是替换字符串中找到的所有的字符或字符串,若逐个替换可能会重复被替换导致得不到我们想要的结果,对于字符串的改变还是StringBuffer比较方便,可以简单实现增删改。 2.字母之间的转换其实是ASCII码值的变换,最后需要再强制转换一下,为实现循环替换,可巧妙利用求余符号
4、编写一个程序实现扑克牌的洗牌算法,52张牌(不包括大、小王)并输出发牌结果(枚举类型)
enum cardValue{ _A,_2,_3,_4,_5,_6,_7,_8,_9,_10,_J,_Q,_K; } class card{ char cardType; cardValue value; public card(char cardType,cardValue value) { this.cardType=cardType; this.value=value; } public String toString() { return "花色:"+cardType+",值:"+value; } } public class exam_6 { public static void main(String[] args) { // TODO Auto-generated method stub char type[]= {'R','B','F','M'}; //分别代表红桃,黑桃,方块,梅花 cardValue values[]=cardValue.values(); card cd[]=new card[52]; for(int i=0;i<type.length;i++) { //初始化每张牌 for(int j=0;j<values.length;j++) cd[i*13+j]=new card(type[i],values[j]); } //洗牌,每次随机选一张和第一张交换位置,1000次 for(int k=0;k<=1000;k++) { int m=(int)(Math.random()*51+1); card temp=cd[0]; cd[0]=cd[m]; cd[m]=temp; } System.out.println("东\t\t南\t\t西\t\t北"); //发牌 for(int i=0;i<cd.length;i++) { System.out.print(cd[i]+"\t"); if((i+1)%4==0) System.out.println(); } } }注: 1.用枚举类型定义扑克牌时,因为标识符不能以数字开头所以在前面加了一个下划线; 2.先初始化每张牌,洗牌的操作其实就是每次随机选一张和第一张交换位置,执行多次