【分析】字符串排序程序设计

字符串排序程序设计

编写一个字符串排序程序,对一个字符串中的数值进行从小到大的排序

例如字符串“36 9 78 29 -7 20”

要求变成    “ -7 9 20 29 36 78 ”

目录

字符串排序程序设计

编写一个字符串排序程序,对一个字符串中的数值进行从小到大的排序


需求分析:字符串数值排序
观察: 字符串使用空格来对数值进行分割
主要问题:字符串不能比较数字大小
解决方案将字符串数组转换成整型数组进行排序
优化:排序方法可以自己写个冒泡排序,快速排序等等,这里直接使用Arrays类中的sort()方法将转换后的数组进行排序
完善:利用StringBuffer类的append()方法将数组元素和元素连接成字符串
 
知识点链接:StringBuffer append() 和 String 类不同的是,StringBuffer类的对象能够被多次的修改,
   并且不产生新的未使用对象
 * public class Test{
      public static void main(String args[]){
        StringBuffer sBuffer = new StringBuffer("欢迎一起学习:我是");
        sBuffer.append("cmd");
        sBuffers.append("c");
        sBuffer.append("h");
        System.out.println(sBuffer);  
      }
    }
    输出结果:欢迎一起学习:我是cmdch
/*知识点:
 * 字符串赋值:String str = "abc";

is equivalent to: 

     char data[] = {'a', 'b', 'c'};
     String str = new String(data);
*/

 需要哪些功能,总的调用方法

public static String sortStringNumber(String numStr) {
	//将字符串变成字符串数组
	String[] str_arr=stringToArray(numStr);
	//将字符串数组变成int数组
	int[] num_arr=toIntArray(str_arr);
	//对int数组进行排序
	mySortArray(num_arr);
	//将排序后的int数组变成字符串
	String temp=arrayToString(num_arr);
	return temp;
}

将排序后的int数组变成字符串

public static String arrayToString(int[] num_arr) {
	StringBuffer sb=new StringBuffer();
	for(int x=0;x<num_arr.length;x++) {
		if(x!=num_arr.length-1) {
			sb.append(num_arr[x]+SPACE_SEPARATOR);
		}
		else {
			sb.append(num_arr[x]);
		}
	}
	return sb.toString();
}

排序算法 (Arrays.sort)

public static void mySortArray(int[] num_arr) {
	Arrays.sort(num_arr);
//这里就直接使用Arrays里的sort方法排序,当然也可以用其他排序方法例如bubblesort
}

 字符串数组变成int数组

public static int[] toIntArray(String[] str_arr) {
	int[] arr=new int[str_arr.length];
	//表示申明一个整形一维数组arr,同时分配str_arr.length个整数大小的空间,
	//具体大小要看当前系统整形所占字节大小,一般是4个字节,所以4*10=40个字节
	for(int i=0;i<arr.length;i++) {
		arr[i]=Integer.parseInt(str_arr[i]);//return 参数以十进制返回的整数值
	}
	return arr;
}

字符串变为字符串数组 

public static String[] stringToArray(String numStr) {
	String[] str_arr=numStr.split(SPACE_SEPARATOR);
	/*
	 为了去掉空格的同时分离,这里使用了split函数
	 *类似于找一个参照字母或者符号,将它替换为分离符号的一种分离方法,
	 *特别注意的是结果数组中不包含尾随的空字符串
	这里是解释举个栗子
	The string "boo:and:foo", for example, yields the following results with these expressions: 

	Regex           Result

	:       { "boo", "and", "foo" }} 
	o       { "b", "", ":and:f" }} 
	*/ 

	return str_arr;
}

 

 


package WrapperString;
import java.util.Arrays;
public class WrapperString {
private static final String SPACE_SEPARATOR=" ";
public static void main(String[] args) {
	String numStr ="20 78 9 88 36 29";
	System.out.println(numStr);
	numStr=sortStringNumber(numStr);
	System.out.println(numStr.toString());
}
public static String sortStringNumber(String numStr) {
	//将字符串变成字符串数组
	String[] str_arr=stringToArray(numStr);
	//将字符串数组变成int数组
	int[] num_arr=toIntArray(str_arr);
	//对int数组进行排序
	mySortArray(num_arr);
	//将排序后的int数组变成字符串
	String temp=arrayToString(num_arr);
	return temp;
}
public static String arrayToString(int[] num_arr) {
	StringBuffer sb=new StringBuffer();
	for(int x=0;x<num_arr.length;x++) {
		if(x!=num_arr.length-1) {
			sb.append(num_arr[x]+SPACE_SEPARATOR);
		}
		else {
			sb.append(num_arr[x]);
		}
	}
	return sb.toString();
}
public static void mySortArray(int[] num_arr) {
	Arrays.sort(num_arr);
}
public static int[] toIntArray(String[] str_arr) {
	int[] arr=new int[str_arr.length];
	//表示申明一个整形一维数组arr,同时分配str_arr.length个整数大小的空间,
	//具体大小要看当前系统整形所占字节大小,一般是4个字节,所以4*10=40个字节
	for(int i=0;i<arr.length;i++) {
		arr[i]=Integer.parseInt(str_arr[i]);//return 参数以十进制返回的整数值
	}
	return arr;
}
public static String[] stringToArray(String numStr) {
	String[] str_arr=numStr.split(SPACE_SEPARATOR);
	return str_arr;
}
}

 

  • 8
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值