word 排序

题目

一个字符串,每个单词都会夹带一个数据(1-9),我们要做的就是根据数字的顺序从小到大调整单词在字符串中的位置;

举个例子

is2 Thi1s T4est 3a =》Thi1s is2 3a T4est

我的代码

package codewars;

import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class Order {
    public static String order(String words) {
    //先用正则表达式把每个单词中的数字提取出来,数字最有key,单词作为value存放于Map中
        Map<Integer, String> map = new HashMap<>();
        String pattern = "(\\D*)(\\d+)(.*)";
        Pattern p = Pattern.compile(pattern);
        String[] strArr = words.split(" ");
        for (String word : strArr) {

            Matcher m = p.matcher(word);
            if (m.find())
                map.put(Integer.parseInt(m.group(2)), word);
        }
        //从1-9遍历拼装出结果
        StringBuilder sb = new StringBuilder();
        for (int i = 1; i < 10; i++) {
            if (map.get(i) != null)
                sb.append(map.get(i)).append(" ");
        }
        return sb.toString().trim();
    }

    public static void main(String[] args) {
        System.out.println(Order.order("is2 Thi1s T4est 3a"));
    }
}

高手的代码

package codewars;

import java.util.Arrays;
import java.util.Comparator;

public class Order {
    public static String order(String words) {
        return Arrays.stream(words.split(" "))
                .sorted(Comparator.comparing(s -> Integer.valueOf(s.replaceAll("\\D", ""))))
                .reduce((a, b) -> a + " " + b).get();

    }

    public static void main(String[] args) {
        System.out.println(Order.order("is2 Thi1s T4est 3a"));
    }
}

总结:这个思路很好,先将非数字的符号都替换为空,再用java8的lamda表达式和增强版Comparator进行排序,寥寥几行代码就解决问题

猜你喜欢

转载自blog.csdn.net/qqqq0199181/article/details/80704997
今日推荐