这篇来写一个编程练习,题目是在给定的一个字符串中,里面全部是一些数字元素,需要通过代码实现,按照从小到大的数字输出成字符串。
1.题目
在给定的字符串“91 27 46 38 50”,编程实现输出“27 38 46 50 91”.
2.分析过程
1)将字符串转换成一个字符串数组
2)将字符串保存在一个等长度的int数组
3)排序
4)排序之后遍历并拼接输出成一个新字符串
3.代码实现
package regex;
import java.util.Arrays;
public class Test1_Split {
public static void main(String[] args) {
String source = "91 27 46 38 50";
//1. 切割成字符串数组
String[] arr1 = source.split(" ");
//2. 保存在一个等长度的int数组
int[] arr2 = new int[arr1.length];
// 分别存储到arr2中
for(int i = 0 ; i < arr1.length; i++) {
arr2[i] = Integer.parseInt(arr1[i]); //将数字字符串转换成int类型
}
// 3.对arr2排序
Arrays.sort(arr2);
// 4.遍历并输出
StringBuilder sb = new StringBuilder();
for(int i = 0 ; i < arr2.length; i++) {
if(i == arr2.length -1) {
sb = sb.append(arr2[i]);
}else {
sb = sb.append(arr2[i] + " ");
}
}
// 5. 输出字符串
System.out.println(sb);
}
}
输出结果:27 38 46 50 91
这里来思考下,在上面代码为什么要使用StringBuilder,为什么最后遍历里还需要一个if else判断。如果先定义一个空的String字符串,然后使用加号(+)进行拼接。这样会产生很多个垃圾,内存开销大。而使用StringBuilder就不会,前后只使用了一个对象,就进行了字符串拼接。使用i判断,主要是处理最后一个元素拼接后面产生的一个多余的空格。
这个编程题,考察了以下几个知识点:
1)正则中切割方法split()
2)Integer包装类里的字符串转换成int类型方法
3)排序,上面使用了Arrays这个工具类,你也可以写快速排序或者冒泡排序实现
4)StringBuilder和String的优点比较。