【问题标题】:Output of hashmap.get not matching to the string valuehashmap.get 的输出与字符串值不匹配
【发布时间】:2023-01-03 14:10:23
【问题描述】:

我在这里尝试查找在这个字符串数组中索引 i 中的每个元素是否按字典顺序排列

import java.util.Arrays;
import java.util.HashMap;
import java.util.Scanner;

public class lexo {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String[] strs = new String[3];
        HashMap<Integer,String> map = new HashMap<>();
        for (int i = 0; i < strs.length; i++) {
            strs[i] = in.next();
        }
        for (int i = 0; i < strs.length; i++) {
            map.put(i,strs[i]);
            System.out.println(map);
        }

        for (int i = 0; i < strs.length; i++) {
            char[] txt = strs[i].toCharArray();
            Arrays.sort(txt);
            String a = map.get(i;
            if(a.equals(txt)){
                map.remove(i);
            }
        }
        System.out.println(map);
    }
}

当我输入类似:abc bca abc 我应该得到类似 {0=abc,2=abc} 的地图 但它不是

【问题讨论】:

  • a.equals(txt) 始终为假。您正在比较 stringchar 数组。

标签: java hashmap


【解决方案1】:

好的所以问题就在这里。

        char[] txt = strs[i].toCharArray();
        Arrays.sort(txt);
        String a = map.get(i);
        if(a.equals(txt)){
            map.remove(i);
        }

(我更正了打字错误......)

在这一行:

        if(a.equals(txt)){

您正在将(排序的)字符数组与 String 进行比较。那会失败的。字符数组永远不会等于 String。一个字符数组只能等于另一个字符数组。

事实上......一个字符数组永远只等于它自己。 (您可以通过阅读 Object.equals(Object) 的 javadoc 来确认这一点......它没有被数组类型覆盖。

在比较之前,您需要将 char[] 变回 String。 (查看 String 的 javadocs ...,看看您是否能弄清楚您需要做什么。)

【讨论】:

    猜你喜欢
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-19
    • 2020-06-17
    • 2020-04-15
    • 2017-11-22
    相关资源
    最近更新 更多