java hashmap.get的输出与字符串值不匹配[重复]

vbopmzt1  于 2023-01-04  发布在  Java
关注(0)|答案(2)|浏览(136)
    • 此问题在此处已有答案**:

How can I compare a string and a char array in Java?(4个答案)
11小时前关门了。
我在这里试图找出在这个字符串数组中索引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 i应该获得类似于{0 = abc,2 = abc}的Map,但它不是

6yt4nkrj

6yt4nkrj1#

好吧,问题就在这里。

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。这将返回false。一个字符数组永远不等于String。一个字符数组只能等于一个字符数组。
事实上,Java数组 * 只等于它自己 *。您可以通过阅读Object.equals(Object)的javadoc ...来确认这一点,它没有被数组类型覆盖。
在比较之前,您需要将char[]重新转换为String。提示:查看String的javadocs,看看您是否能够找出需要做的事情。

o4tp2gmn

o4tp2gmn2#

您的**a.equals(txt)**条件将始终为false。如果要执行此比较,您必须将字符数组转换为String对象,或者将String转换为char数组,然后执行比较。
将char数组转换为String,然后进行比较:

if (a.equals(new String(txt)))


将String值转换为char数组,然后进行比较。

if(Arrays.equals(a.toCharArray(),txt))

相关问题