题目
一个字符串,每个单词都会夹带一个数据(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"));
}
}