力扣937重新排列日志文件(自定义排序)

简直是在折磨我~~~

这是我的第一次代码:

class Solution {
    public String[] reorderLogFiles(String[] arr) {
    ArrayList<String> list1 = new ArrayList<>();
			ArrayList<String> list2 = new ArrayList<>();
			for (int i = 0; i < arr.length; i++) {
				String[] t = arr[i].split(" ");
				char c = t[1].charAt(0);
				if (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z') {
					list1.add(arr[i]);
				} else {
					list2.add(arr[i]);
				}
			}
			String[] arrt = new String[list1.size()];
			for (int i = 0; i < list1.size(); i++) {
				arrt[i] = list1.get(i);
			}
			list1.clear();
			for (int i = 0; i < arrt.length; i++) {
				int max = i;
				for (int j = i + 1; j < arrt.length; j++) {
					if (f(arrt[max]).compareTo(f(arrt[j])) >= 0) {
						max = j;
					}
					if (max != i) {
						String t = arrt[max];
						arrt[max] = arrt[i];
						arrt[i] = t;
					}
				}
			}
			for (int i = 0; i < arrt.length; i++) {
				list1.add(arrt[i]);
			}
			list1.addAll(list2);

			for (int i = 0; i < list1.size(); i++) {
				arr[i] = list1.get(i);
			}
			// for (int i = 0; i < arr.length; i++) {
			// 	System.out.println(arr[i]);
			// }
            return arr;
		}

		private  String f(String s) {
			String[] arrt = s.split(" ");
			String str = "";
			for (int i = 1; i < arrt.length; i++) {
				str += arrt[i];
			}
			return str;
		}
}

大致思路就是:分别找出英文的文件、数字文件、然后对英文文件排序,最后加上数字文件;

结果还是我太年轻了,想得太短浅了它的条件有:

1、去掉头名,按照字母排序

2、如果英文文件完全相同,按照头名排序, 

最后我还是屈服了,看了别人的题解

我们先介绍一下:Arrays.sort()排序;

它有两种方法:

1、直接升序排序:Arrays.sort(arr);

2、自定义排序:Arrays.sort(arr,a,b->

return 1;//返回大于0就代表a比b大,0就是相同,小于0就是a比b小

);

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;

public class likou937 {

	public static void main(String[] args) {
		String[] arr = { "j mo", "5 m w", "g 07", "o 2 0", "t q h" };
		Arrays.sort(arr, (a, b) -> {
			String s1[] = a.split(" ", 2);//分割成两个部分:头名、内容
			String s2[] = b.split(" ", 2);
			boolean a1 = Character.isDigit(s1[1].charAt(0));//判断是否为数字
			boolean b1 = Character.isDigit(s2[1].charAt(0));
			if (!a1 && !b1) {//都是英文的情况
				if (!s1[1].equals(s2[1])) {//内容进行排序
					return s1[1].compareTo(s2[1]);
				} else {//内容相同,按照头名进行排序
					return s1[0].compareTo(s2[0]);
				}
			} else if (a1 && b1) {//都是数字
				return 0;
			} else if (!a1) {//a是字母,就要排在前面
				return -1;
			} else {//否则在后面
				return 1;
			}

		});
		for (int i = 0; i < arr.length; i++) {
			System.out.println(arr[i]);
			
		}
	}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值