题解 | #字符串合并处理#

字符串合并处理

https://www.nowcoder.com/practice/d3d8e23870584782b3dd48f26cb39c8f

import java.util.Scanner;
import java.util.*;
import java.util.stream.Collectors;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextLine()) { // 注意 while 处理多个 case
            String inputLine = in.nextLine();
            String rawLine = Arrays.stream(inputLine.split(" "))
                             .collect(Collectors.joining(""));
            // 偶数
            List<Character> odds = new ArrayList();
            List<Character> evens = new ArrayList();

            List<Character> list = rawLine.chars()
                                   .mapToObj(o->(char)o)
                                   .collect(Collectors.toList());
            int total = list.size();
            for (int i = 0; i < total; i++) {
                if (i % 2 == 0) {
                    odds.add(list.get(i));
                } else {
                    evens.add(list.get(i));
                }
            }
            odds.sort(Character::compare);
            evens.sort(Character::compare);
            list.clear();
            int j = 0;
            int k = 0;
            for (int i = 0; i < total; i++) {
                if (i % 2 == 0) {
                    list.add(odds.get(j++));
                } else {
                    list.add(evens.get(k++));
                }
            }
            list.stream()
            .map(c-> {
                if ( ('0' <= c && c <= '9') || ('A' <= c && c <= 'F') || ('a' <= c && c <= 'f')) {
                    String bs = Integer.toBinaryString(Integer.valueOf(c.toString(), 16));
                    StringBuilder reversed = new StringBuilder();
                    for (int i = bs.length() - 1; i >= 0; i--) {
                        reversed.append(bs.charAt(i));
                    }
                    while(reversed.length() < 4) {
                        reversed.append("0");
                    }
                    int reversedValue = Integer.valueOf(reversed.toString(), 2).intValue();
                    if (reversedValue < 10) {
                        return String.valueOf(reversedValue);
                    }
                    return String.valueOf((char)('A' + reversedValue - 10));
                }
                return c;

            })
            .forEachOrdered(c-> {
                System.out.print(c);
            });

        }
    }
    // 排序,合并
}

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务