字符串的算法练习前言本文的算法练习来自黑马程序员的黑马程序员2026版AIJava零基础全套视频课程文章目录字符串的算法练习1.字符串分离先打印再补零先补零再打印两种写法的对比2.打乱字符串3.字符串计算1.字符串分离要求键盘录入任意字符串请按长度为 8 拆分每个输入字符串并进行输出长度不是 8 整数倍的字符串请在后面补数字 0空字符串不处理。举例输入abcdabcda输出第一行abcdabcd第二行a0000000先打印再补零importjava.util.Scanner;publicclasstest{publicstaticvoidmain(String[]args){ScannerscnewScanner(System.in);System.out.println(请输入字符串);//获取字符串Stringstrsc.next();//打印每一个字符然后遇到8就换行//System.out.println()运行后会换行//System.out.print()运行后不会换行for(inti0;istr.length();i){//获取具体位置的字符打印charcstr.charAt(i);System.out.print(c);if((i1)%80){System.out.println();}}//计算最后一行的字符数intlastLineCountstr.length()%8;//计算需要补的零数intcount8-lastLineCount;//打印0for(inti0;icount;i){System.out.print(0);}}}先补零再打印importjava.util.Scanner;publicclasstest2{publicstaticvoidmain(String[]args){//1.获取字符串System.out.println(请输入字符串);ScannerscnewScanner(System.in);Stringstrsc.next();//2.获取需要补的0的数intlastLineCountstr.length()%8;intcount8-lastLineCount;Strings00000000.substring(0,count);strstrs;//3.打印字符串for(inti0;istr.length();i8){Stringresstr.substring(i,i8);System.out.println(res);}}}两种写法的对比第一种只用一个字符串就能实现打印但是是每一次循环打印一个字符还要手动再次换行。第二种用了substring(begin,end)方法是左取右不取的方法在打印字符串的时候可以一次性打印出8个字符并且换行。但是第二种方法需要用到3个字符串来完成。不过二次开发的时候比如要把8个一行换成11个一行第一种解法只用改变几个数字重新算一下要补的零的个数而第二种不仅要重新算个数还要修改00000000的字符串。2.打乱字符串要求通过键盘输入字符串然后打乱顺序再打印importjava.util.Random;importjava.util.Scanner;publicclasstest3{publicstaticvoidmain(String[]args){ScannerscnewScanner(System.in);RandomrnewRandom();System.out.println(请输入字符串);Stringstrsc.next();//因为字符串是不能改变的所以将字符串转为字符数组char[]chstr.toCharArray();//防止重复字符串的出现booleanflagtrue;while(flag){for(inti0;ich.length;i){//随机生成索引交换数值intrandomIndexr.nextInt(ch.length);chartempch[randomIndex];ch[randomIndex]ch[i];ch[i]temp;}//将字符数组转换回字符串StringresnewString(ch);//判断字符串是否重复不重复就置标志位为false然后退出循环if(!res.equals(str)){flagfalse;System.out.println(res);}}}}黑马程序员给的代码是没有增加字符串重复检查的这里加了字符串的重复检查就能避免打印出来的不和原本的重复。3.字符串计算定义两个字符串记录为非负整数求它们的和。 输入: “12395” 和 “133” , 输出: “12528”注意: 需要数据过大, 超出int取值范围的情况代码如下packageAPI_06;publicclasstest4{publicstaticvoidmain(String[]args){//1.创建两个字符串Stringstr112359;Stringstr2133;//2.获取最长字符串数intlenstr1.length()str2.length()?str1.length():str2.length();//3.将字符串转化为整型数组int[]arr1copydata(len,str1);int[]arr2copydata(len,str2);//4.计算int[]sumnewint[len1];//进位计算器intnum0;for(intiarr1.length-1;i0;i--){//将同位的计算结果记录起来inttemparr1[i]arr2[i]num;//取余来计算此位的数sum[i1]temp%10;//取整来计算进位numtemp/10;}//最后要考虑第一位sum[0]num;StringBuildersbnewStringBuilder();//如果第一位是0则不打印if(sum[0]!0){sb.append(sum[0]);}for(inti1;isum.length;i){sb.append(sum[i]);}System.out.println(sb);}publicstaticint[]copydata(intlen,Stringstr){//创建整型数组容器int[]arrnewint[len];//index来记录索引从后往前intindexarr.length-1;for(intistr.length()-1;i0;i--){//取每一位的字符charcstr.charAt(i);//通过ASCLL码计算intnumc-48;arr[index]num;index--;}returnarr;}}um c-48;arr[index] num;index–;}return arr;}}[外链图片转存中...(img-RQnwRM1a-1778163090564)] [外链图片转存中...(img-ORdzJe8i-1778163090565)] copydata中的逻辑