java通过Comparable接口实现字符串比较大小排序的简单实例

1.String本身是不具备比较大小功能的,但是由于String对象实现了 Comparable的接口.这个接口是可比较功能的接口.这里定义了比较方法compareTo方法. Api手册中的描述: 此接口强行对实现它的每个类的对象进行整体排序。 这种排序被称为类的自然排序,类的 compareTo 方法被称为它的自然比较方法

2.所以如果我们定义了一个类,这个类产生的对象,想要比大小时,我们就不用自己写方法了, 直接实现Comparable接口,重写compareTo方法就可以了.注:本题中String类已经重写了 comparTo方法

3. 该方法比较对象 与 指定对象的 顺序 写法: campareTo(T o); 返回值: int 返回 0(两者相等),负数(对象小于参数),正数 (对象大于参数) 参数: o 为要比较的对象

public class CompareTo{

	public static void main(String[] args) {
		String[] str = {"nba","cba" ,"ncaa" ,"wba","ccba","abc"};
		printArr(str);	
		strSort(str);		//练习排序方法
//		Arrays.sort(str);	排序用法
		printArr(str);
		
	}
	
	/**
	 * 对字符串进行由小到大排序
	 * @param str	String[] 需要排序的字符串数组
	 */
	public static void strSort(String[] str){
		for (int i = 0; i < str.length; i++) {
			for (int j = i+1; j < str.length; j++) {
				if(str[i].compareTo(str[j])>0){	//对象排序用camparTo方法
					swap(str,i,j);
				}
			}
		}
		
	}
	/**
	 * 交换两个元素的位置的方法
	 * @param strSort	需要交换元素的数组	
	 * @param i	索引i
	 * @param j 索引j
	 */
	private static void swap(String[] strSort, int i, int j) {
		String t = strSort[i];
		strSort[i] = strSort[j];
		strSort[j] = t;
	}
	/**
	 * 打印字符串数组
	 * @param str
	 */
	private static void printArr(String[] str) {
		for (int i = 0; i < str.length; i++) {
			System.out.print(str[i]+"\t");
		}
		System.out.println();
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 你可以使用Java中的Comparator来实现同时包含字符串和数字的升序排序。以下是一个简单的例子: 假设你有一个包含字符串和数字的列表,例如: ``` List<String> list = Arrays.asList("apple1", "apple10", "apple2", "banana1", "banana10", "banana2"); ``` 你可以创建一个Comparator对象,并使用它来对列表进行排序,如下所示: ``` Comparator<String> comparator = new Comparator<String>() { @Override public int compare(String s1, String s2) { String s1Alpha = s1.replaceAll("\\d+", ""); // 提取s1中的字母 String s2Alpha = s2.replaceAll("\\d+", ""); // 提取s2中的字母 int result = s1Alpha.compareTo(s2Alpha); // 比较字母部分 if (result == 0) { // 如果字母部分相同,则比较数字部分 Integer s1Num = Integer.parseInt(s1.replaceAll("\\D+", "")); // 提取s1中的数字 Integer s2Num = Integer.parseInt(s2.replaceAll("\\D+", "")); // 提取s2中的数字 result = s1Num.compareTo(s2Num); // 比较数字部分 } return result; } }; Collections.sort(list, comparator); // 对列表进行排序 System.out.println(list); // 输出排序后的列表 ``` 这段代码首先创建了一个匿名内部类实现了Comparator接口,并重写了compare方法,实现了对字符串的字母部分和数字部分的比较。然后使用Collections.sort方法对列表进行排序排序的方式是使用了自定义的比较器对象。最后输出排序后的列表。 ### 回答2: 要对同时包含字符串和数字的元素进行升序排序,可以使用Java中的Comparator接口和Collections类的sort方法来实现。 首先,我们需要定义一个自定义的比较器(Comparator)来指定排序规则。比较器需要实现Comparator接口,并重写compare方法。在compare方法中,我们可以根据需要的排序规则对字符串和数字进行比较,并返回比较结果。 例如,假设我们有一个包含字符串和数字的元素的列表List,可以按照以下步骤进行排序: 1. 定义一个自定义的比较器: ```java import java.util.Comparator; public class CustomComparator implements Comparator<String> { @Override public int compare(String str1, String str2) { // 比较字符串部分 int result = str1.compareTo(str2); if (result != 0) { return result; } // 比较数字部分 int num1 = extractNumber(str1); int num2 = extractNumber(str2); return Integer.compare(num1, num2); } // 提取字符串中的数字部分 private int extractNumber(String str) { String number = str.replaceAll("[^\\d]", ""); if (number.isEmpty()) { return 0; } return Integer.parseInt(number); } } ``` 2. 使用Collections类的sort方法进行排序: ```java import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Main { public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("abc12"); list.add("abc4"); list.add("abc8"); list.add("abc1"); list.add("abc2"); list.add("abc30"); Collections.sort(list, new CustomComparator()); System.out.println(list); } } ``` 运行以上代码,输出结果为: ``` [abc1, abc2, abc4, abc8, abc12, abc30] ``` 通过以上步骤,我们可以实现对同时包含字符串和数字的元素进行升序排序的功能。 ### 回答3: 要对同时包含字符串和数字的数据进行升序排序,可以使用Java的Comparator接口Comparable接口实现。 1. 使用Comparator接口: 可以自定义一个Comparator类来实现升序排序。首先需要实现Comparator接口,并重写compare方法,在该方法中编写自定义的比较逻辑。在比较时,可以通过比较字符串和数字的方式来进行排序。 例如,考虑一个包含字符串和数字的数据对象Data,其中包含属性name和num: ```java public class DataComparator implements Comparator<Data> { @Override public int compare(Data o1, Data o2) { // 按name进行比较 int compareByName = o1.getName().compareTo(o2.getName()); // 如果name相同,则按num进行比较 if (compareByName == 0) { return o1.getNum() - o2.getNum(); } else { return compareByName; } } } ``` 然后,在排序时使用Collections.sort()方法,并传入自定义的Comparator对象: ```java List<Data> dataList = new ArrayList<>(); // ... 往dataList添加数据 Collections.sort(dataList, new DataComparator()); ``` 2. 使用Comparable接口: 如果数据对象类实现Comparable接口,可以在类中重写compareTo方法来实现比较逻辑。在该方法中,我们可以按照字符串和数字的方式进行排序。 例如,数据对象类Data实现Comparable接口: ```java public class Data implements Comparable<Data> { private String name; private int num; // ... 省略其他属性和构造方法 @Override public int compareTo(Data other) { // 按name进行比较 int compareByName = this.name.compareTo(other.name); // 如果name相同,则按num进行比较 if (compareByName == 0) { return this.num - other.num; } else { return compareByName; } } } ``` 然后,在排序时,直接调用Collections.sort()方法即可: ```java List<Data> dataList = new ArrayList<>(); // ... 往dataList添加数据 Collections.sort(dataList); ``` 以上两种方式都可以对同时包含字符串和数字的数据进行升序排序。选择使用哪种方式取决于具体需求和使用场景。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值