字符串处理

爱新觉罗LQ / 2023-09-05 / 原文

1. 数组拼接

坑比用例

3
2
2,5,6,7,,,9,5,7
1,7,4,3,,4
import java.util.Scanner;
import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
       Scanner in = new Scanner(System.in);
        int Len = Integer.parseInt(in.nextLine());
        int count = Integer.parseInt(in.nextLine());
        List<List<Integer>> lists = new ArrayList<>();
        List<Integer> res = new ArrayList<>();
        for (int i = 0; i < count; i++) {   //  堆每行进行
            String[] split = in.nextLine().split("[,]+");  //  处理多逗号的情况
            int tempLen = split.length; //  长度
            for (int j = 0; j < tempLen && j < Len; j++) {    //  收入结果中
                res.add(Integer.parseInt(split[j]));
            }
            ArrayList<Integer> temp = new ArrayList<>();
            for (int j = Len; j < split.length; j++) {
                temp.add(Integer.parseInt(split[j]));
            }
            if (temp.size() != 0){
                lists.add(temp);
            }
        }
        int sum = 0;
        for (List<Integer> list : lists) {
            if (list.size() != 0){
                sum++;
            }
        }
        getResult(sum, lists, res, Len);
        StringBuilder ans = new StringBuilder();
        for (Integer re : res) {
            ans.append(re + ",");
        }
        System.out.println(ans.substring(0, ans.length() - 1));
    }

    public static void getResult(int sum, List<List<Integer>> lists, List<Integer> res, int len){
        if (sum == 0){
            return;
        }
        for (int i = 0; i < lists.size(); i++) {
            List<Integer> list = lists.get(i);
            int size = list.size();
            if (size == 0){
                continue;
            }
            for (int j = 0; j < size && j < len; j++) {
                res.add(list.get(j));
            }
            if (size <= len){
                lists.set(i, new ArrayList<>());
                sum--;
            }else { //  比你要拿的长
                for (int j = 0; j < len; j++) {
                    list.remove(0);
                }
                lists.set(i, list);
            }
        }
        getResult(sum, lists, res, len);
    }
}

使用 subList 进行优化

import java.util.Scanner;
import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
       Scanner in = new Scanner(System.in);
        int Len = Integer.parseInt(in.nextLine());
        int count = Integer.parseInt(in.nextLine());
        List<List<Integer>> lists = new ArrayList<>();
        List<Integer> res = new ArrayList<>();
        for (int i = 0; i < count; i++) {   //  堆每行进行
            String[] split = in.nextLine().split("[,]+");
            int tempLen = split.length; //  长度
            for (int j = 0; j < tempLen && j < Len; j++) {    //  收入结果中
                res.add(Integer.parseInt(split[j]));
            }
            ArrayList<Integer> temp = new ArrayList<>();
            for (int j = Len; j < split.length; j++) {
                temp.add(Integer.parseInt(split[j]));
            }
            if (temp.size() != 0){
                lists.add(temp);
            }
        }
        int sum = 0;
        for (List<Integer> list : lists) {
            if (list.size() != 0){
                sum++;
            }
        }
        getResult(sum, lists, res, Len);
        StringBuilder ans = new StringBuilder();
        for (Integer re : res) {
            ans.append(re + ",");
        }
        System.out.println(ans.substring(0, ans.length() - 1));
    }

   public static void getResult(int sum, List<List<Integer>> lists, List<Integer> res, int len){
        if (sum == 0){
            return;
        }
        for (int i = 0; i < lists.size(); i++) {
            List<Integer> list = lists.get(i);
            int size = list.size();
            if (size == 0){
                continue;
            }
            for (int j = 0; j < size && j < len; j++) {
                res.add(list.get(j));
            }
            if (size <= len){
                list.clear();
                sum--;
            }else { //  比你要拿的长
                list.subList(0, len).clear();
                lists.set(i, list);
            }
        }
        getResult(sum, lists, res, len);
    }
}