首页 > 解决方案 > 如何在 Java 中简化印度地区的字符串?(问题扩展)

问题描述

我有一串印度地区。例如String districts = district1,district2,district3,...等等(可能是印度的全部或部分地区)。
假设,
district1,district2,district3 是拉贾斯坦邦的地区
,而
district4,district5,district6 是古吉拉特邦的地区 我想在其中显示地区变量的

场景是什么,但如果这个字符串包含任何州的所有地区,那么只有州名应该显示在它的所有地区的地方。它将减少字符串的大小,并且看起来会更好。有关详细说明,请参阅基本问题
TextView


实现案例 1
输入 = District1,district2,district3,district4
输出 = Rajasthan,district4

实现案例 2
输入 = District1,district2,district3,district4,district5
输出 = Rajasthan,district4,district5

实现案例 2
输入 = District1,district2,district3,district4,district5,district6
输出 = Rajasthan,Gujrat

以上案例由@Live 和 Let Live 回答


预期案例 1
输入 = District1,district2,district3,district4
输出 = Rajasthan, Gujrat (district4)

预期案例 2
输入 = District1,district2,district3,district4,district5
输出 = Rajasthan,Gujrat (district4,district5)

预期案例 3
输入 = District1,district2,district3,district4,district5,district6
输出 = Rajasthan,Gujrat

标签: javaandroidstring

解决方案


扩展我之前的答案,下面给出了如何实现此要求:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        Set<String> districtSetRajasthan = new HashSet<>();
        districtSetRajasthan.add("Dist1");
        districtSetRajasthan.add("Dist2");
        districtSetRajasthan.add("Dist3");

        Set<String> districtSetGujrat = new HashSet<>();
        districtSetGujrat.add("Dist4");
        districtSetGujrat.add("Dist5");

        Map<String, Set<String>> mapStates = new LinkedHashMap<String, Set<String>>();
        mapStates.put("Rajasthan", districtSetRajasthan);
        mapStates.put("Gujrat", districtSetGujrat);

        // Tests
        String textViewString = "Dist1,Dist2,Dist3,Dist4";
        System.out.println(getStateDistString(textViewString, mapStates));

        textViewString = "Dist1,Dist2,Dist3,Dist4,Dist5";
        System.out.println(getStateDistString(textViewString, mapStates));
    }

    static String getStateDistString(String districts, Map<String, Set<String>> mapStates) {
        // Split districts on comma and put the elements of the resultListing array into
        // a HashSet
        Set<String> districtSetTextView = Arrays.stream(districts.split(",")).collect(Collectors.toSet());

        List<String> resultList = new ArrayList<>();

        for (String state : mapStates.keySet()) {
            Set<String> allDistrictsOfState = mapStates.get(state);
            if (districtSetTextView.containsAll(allDistrictsOfState)) {
                resultList.add(state);
                districtSetTextView.removeAll(allDistrictsOfState);
            } else {
                List<String> temp = new ArrayList<>();
                for (String dist : districtSetTextView) {
                    if (allDistrictsOfState.contains(dist)) {
                        temp.add(dist);
                    }
                }
                if (temp.size() > 0) {
                    String x = state + "(" + String.join(",", temp) + ")";
                    resultList.add(x);
                    districtSetTextView.removeAll(temp);
                }
            }
        }

        return String.join(",", resultList);
    }
}

输出:

Rajasthan,Gujrat(Dist4)
Rajasthan,Gujrat

此解决方案的新增功能:

  1. 如果完整List<String> temp的地区集不存在于textViewString.
  2. 创建一个字符串作为状态+“(”+temp逗号连接的字符串+“)”并将其添加到resultList. temp像原来的解决方案一样,删除from的所有区districtSetTextView

推荐阅读