javascript - 如何获取像这样的字符串删除Java中的重复字符串

标签 javascript java jquery jsp servlets

我将数组从 jquery 发送到 Controller ,并且该数组在 Controller 中作为字符串获取 String getIdVal = ParamUtil.getString(resourceRequest, "getId");
String getIds 中的值类似于 getIdVal ="1_ABC,2_ABC,3_ABC,4_NMO,5_NMO,6_XYZ";

我正在尝试获得结果,但没有成功。
(考虑到 1 是键 ABC 是值)
我想从所有键中删除 ABC(即重复值)并在末尾仅附加一次。同时我希望重复值的键应该像这样 (1-2-3_ABC)
最后字符串应该像这样 "1-2- 3_ABC,4-5_NMO,6_XYZ”

这里我尝试根据逗号进行分割,但我不知道如何解决。

 List<String> keysVals = new ArrayList<String>(Arrays.asList(getIdVal .split(",")));
                String getKeyVal;
                String[] getKeys;
                String key;
                String value;
    for (String getKeysVals : keysVals) {
        getKeyVal = getKeysVals;
        getKeys = getKeyVal.split("\\_");
        key = getKeys[0];
        value = getKeyVal.substring(getKeyVal.lastIndexOf("_") + 1) .trim();
        // i am not getting how to check for dublicate
        }

最佳答案

你的意思是这样的吗?

private static String mergeKeys(String input) {
    Map<String, StringBuilder> valKeys = new TreeMap<>();
    if (! input.isEmpty())
        for (String keyVal : input.split(",")) {
            int idx = keyVal.indexOf('_');
            String key = keyVal.substring(0, idx);
            String val = keyVal.substring(idx + 1);
            StringBuilder builder = valKeys.get(val);
            if (builder == null)
                valKeys.put(val, new StringBuilder(key));
            else
                builder.append('-').append(key);
        }
    StringJoiner result = new StringJoiner(",");
    for (Entry<String, StringBuilder> entry : valKeys.entrySet())
        result.add(entry.getValue().append('_').append(entry.getKey()).toString());
    return result.toString();
}

或者相同逻辑的缓慢版本,使用string = string + string(哎呀!):

private static String mergeKeys(String input) {
    Map<String, String> valKeys = new LinkedHashMap<>();
    if (! input.isEmpty())
        for (String keyVal : input.split(",")) {
            int idx = keyVal.indexOf('_');
            String key = keyVal.substring(0, idx);
            String val = keyVal.substring(idx + 1);
            String prevKeys = valKeys.get(val);
            valKeys.put(val, prevKeys == null ? key : prevKeys + "-" + key);
        }
    String result = "";
    for (Entry<String, String> entry : valKeys.entrySet())
        result += "," + entry.getValue() + "_" + entry.getKey();
    return result.substring(1); // skip leading comma
}

测试

System.out.println(mergeKeys("1_ABC,2_ABC,3_ABC,4_NMO,5_NMO,6_XYZ"));

输出

1-2-3_ABC,4-5_NMO,6_XYZ

关于javascript - 如何获取像这样的字符串删除Java中的重复字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37493804/

相关文章:

javascript - 是否有 HTML5 替代 JS 的警告框?

javascript - Cookie 问题 - cookie 未定义

java - 移动开发基础java

Java:如果值使用流匹配,则组合两个映射键

jquery - 如何阻止框架在悬停时改变元素的颜色?

Javascript 敌人跟随玩家

java - 将监听器添加到 Java/JavaFX 中的变量,该变量在变量更改时被调用

jquery - 如果放入 .js 文件,ul id 不会触发

javascript - 实现具有多个集合的主视图。主干网.js

JavaScript 计时、jQuery fadeIn fadeOut