字符串比较

[Java实现]已知字母序列【d,g,e,c,f,b,o,a】,请实现一个函数针对输入一组字符串input[]={"bed","dog","dear","eye"} 输出:dear,dog,eye,bed

1)如果这题没有给定字母序列,使用compareTo(str)方法会很快写出程序,默认字母表排序。

String[] strArray = new String[] { "bed", "dog", "dear", "eye" };
		int flag = 0;
		String tmp;
		for (int i = 0; i < strArray.length; i++) {
			String str = strArray[i];
			for (int j = i; j < strArray.length; j++) {
				if(strArray[j].compareTo(str)<=0){
					str = strArray[j];
					flag = j;
				}
			}
			if (flag != i) {
				tmp = strArray[i];
				strArray[i] = str;
				strArray[flag] = tmp;
			}
		}
		for (String ss : strArray) {
			System.out.println(ss);
		}
2)那现在给定了字母顺序,我们只要改写compareTo这个方法就行。设计到比较没什么比数字的大小来的更快。那么我把给定的字母序列存入数组中,数组的下标作为每个字符所代表的数值。

第一种方法:

public class StringTest
{
	static int charOrder[] = { 'd', 'g', 'e', 'c', 'f', 'b', 'o', 'a' };

	public static void main(String[] args)
	{
		String[] strArray = new String[] { "bed", "dog", "dear", "eye" };
		int flag = 0;
		String tmp;
		for (int i = 0; i < strArray.length; i++) {
			String str = strArray[i];
			for (int j = i; j < strArray.length; j++) {
				if(compareStr(strArray[j],str)<=0){
					str = strArray[j];
					flag = j;
				}
			}
			if (flag != i) {
				tmp = strArray[i];
				strArray[i] = str;
				strArray[flag] = tmp;
			}
		}
		for (String ss : strArray) {
			System.out.println(ss);
		}

	}

	static int compareStr(String str1, String str2)
	{
		int length1 = str1.length();
		int length2 = str2.length();
		int len;
		if (length1 < length2) {
			len = length1;
		} else {
			len = length2;
		}
		int[] sortnum1 = new int[len];
		int[] sortnum2 = new int[len];
		int k = 0;
		for (int i = 0; i < len; i++) {
			for (int j = 0; j < charOrder.length; j++) {
				if (str1.charAt(i) == charOrder[j]) {
					sortnum1[k++] = j;
				}
			}
		}
       k=0;
		for (int i = 0; i < len; i++) {
			for (int j = 0; j < charOrder.length; j++) {
				if (str2.charAt(i) == charOrder[j]) {
					sortnum2[k++] = j;
				}
			}
		}
		for (int i = 0; i < len; i++) {
			if (sortnum1[i] < sortnum2[i]) {
				return -1;
			} else if (sortnum1[i] > sortnum2[i])
				return 1;
		}

		if (length1 > length2)
			return 1;
		else if (length1 < length2)
			return -1;
		else
			return 0;
	}

}

第二种方法:

import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;

public class StringTest3 implements Comparator<String>
{
	static char charOrder[] = { 'd', 'g', 'e', 'c', 'f', 'b', 'o', 'a' };
	Map<Character, Integer> map = new HashMap<Character, Integer>();

	public StringTest3()
	{
		for (int i = 0; i < charOrder.length; i++) {
			map.put(charOrder[i], i);
		}
	}

	@Override
	public int compare(String o1, String o2)
	{
		// TODO Auto-generated method stub
		int length1 = o1.length();
		int length2 = o2.length();
		int len = length1 > length2 ? length1 : length2;
		int num;
		for (int i = 0; i < len; i++) {
			num = map.get(o1.charAt(i)) - map.get(o2.charAt(i));
			if(num!=0)return num;
		}
		return length1-length2;
	}
	public static void main(String[] args)
	{
		String[] strArray = new String[] { "bed", "dog", "dear", "eye" };
		Arrays.sort(strArray,new StringTest3());
		for(int i=0;i<strArray.length;i++)
		{
			System.out.println(strArray[i]);
		}
		
	}

}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值