gpt4 book ai didi

java - 通过变量从 HashMap 中获取键

转载 作者:行者123 更新时间:2023-12-01 19:04:00 25 4
gpt4 key购买 nike

嗨,我是java新手,我希望我能找到问题的答案。我正在使用 HashMap 编写一个程序,其中我从包含印地语字符(印度语言)的文件中获取输入,将每个字符映射到第一个从中我得到相应值(每个字符的unicode值)的hashmap,然后将该值带到另一个hashmap,从中我得到相应值(不同语言中相同字符的unicode值),这应该被带到第三个hashmap和检索对应的键(对应的字符)..前两个映射工作正常,但是当映射到第三个 HashMap 时,它返回 null 而不是卡纳达语(印度语言)中的字符键。该程序是将一种语言的文件转写为另一种语言。

对象 x=kannadahash.get("w");是我得到 null 而不是字符的部分

我写的代码:

任何其他以不同方式执行此操作的建议也将受到欢迎提前谢谢您..

import java.util.*;
import java.util.Properties;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
import java.util.Enumeration;
import java.util.Collections;

public class Hashmap1 {

public static void main(String[] args) throws Exception

HashMap hindihash=new HashMap();
hindihash.put("अ",905);
hindihash.put("आ",906);
HashMap kannadahash=new HashMap();
kannadahash.put("ಅ","C85" );
kannadahash.put("ಆ","C86");
HashMap hkhash = new HashMap();
hkhash.put(905,"C85" );
hkhash.put(906,"C86");
File f = new File("D:/Hello.txt");
if (!f.exists() && f.length() < 0)
{
System.out.println("The specified file does not exist");
}
else
{
FileReader fr = new FileReader(f);
BufferedReader reader = new BufferedReader(fr);
String st = " ";
while ((st = reader.readLine()) != null)
{
Object v = hindihash.get(st);
Object w=hkhash.get(v);
if(w!=null)
{
System.out.println(" "+w.toString());
}
else
{
System.out.println("There is no key named " +
"in the HashMap.");
}

Object x=kannadahash.get("w");

if(x!=null)
{
System.out.println(" "+x.toString());
}
else
{
System.out.println("There is no key named " +
"in the HashMap.");
}
}

}

}

最佳答案

你遇到了很多问题..

首先,您的 main 方法中缺少左括号。

其次,您应该在 HashMap 中真正使用泛型,如下所示:

HashMap<String, Integer> hindihash = new HashMap<String, Integer>();

这样你在使用 .get() 时就不必担心处理对象了;您知道 HashMap 会将 String 值映射到 Integer 值。类型安全很重要。

第三,这个 if 语句将无法正常工作:

if (!f.exists() && f.length() < 0)

虽然 length() 检查不是必需的,但我可以理解为什么您可能需要它。如果用户有一个名为“Hello.txt”的空文件,那么您可能希望将该文件视为不存在。这很好,但是当文件不存在时 f.length() 返回 0,而不是 -1。因此您的 if 语句无法正确触发。

第四,您的 kannadahash HashMap 似乎是向后的。 अ = 905。hkhash.get(905) = "C85"。 kannadahash.get("C85") 不存在。也许你的意思是这样的:

kannadahash.put("C85", "ಅ" );

这样,hindihash.get("अ") = 905,hkhash.get(905) = "C85",kannadahash.get("C85") 返回ಅ。

第五,如果您的目标是“音译”整个文件,则这将不起作用:

while ((st = reader.readLine()) != null)

正如您所知,它将立即读取文件的每一行。您想要使用 BufferedReader 的 .read() 方法单独读取文件的每个字符。或者,您可以使用 for 循环来迭代使用 .readLine() 读入的整行,但在这种情况下,您最好只使用 .read()。

第六,您的调试 System.out.println() 缺少要打印的变量,但这现在并不是非常重要。

最后,就像其他人提到的:

Object x=kannadahash.get("w");

应该是

Object x=kannadahash.get(w);

您还应该努力改进变量名称和间距。这非常重要。

关于java - 通过变量从 HashMap 中获取键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10977012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com