gpt4 book ai didi

Java Map 为当前键返回 null

转载 作者:搜寻专家 更新时间:2023-10-31 19:48:07 28 4
gpt4 key购买 nike

我遇到了一个非常不寻常的问题。
基本上,我试图从字符串映射到字符串中获取与键关联的值。
我知道我正在使用的 key 存在;我使用的是我用来放入它的相同字符串!

我在我的代码中打印了语句,在这种情况下我有...
这是我的字典 characterDictionary

{thusChar=∴, spaceChar= , plusChar=+, equalsIndent=#, multiplyChar=×, equalsChar==, newlineChar=\n, divideChar=÷, subjectChar=:, variableIndent=@}

最后一个键“variableIndent”就是问题所在!
这是代码...

System.out.println  (   characterDictionary.get("variableIndent") );

不恰本地输出:null

我已经检查、双重检查和三次检查我的代码。
"variableIndent"characterDictionary.get("variableIndent") 的字符串参数完全没有区别, 但它的行为就好像这个 key 不存在一样。

我绝对可以保证这个 key 存在,并且两个字符串是相同的。
字典的所有其他元素(我已经检查过的;到目前为止大约有 3 个)都正常检索。为什么“variableIndent”和它的“@”值会出现?

您可能会注意到字典包含非 ASCII 字符,例如“thusChar”。这可能相关吗?

谢谢
(这似乎是一个非常简单和微不足道的问题,就好像我犯了一些可悲的愚蠢错误,但我就是无法解决它!)

编辑:

好吧,这一定是关于编码的。
我从字典中取出字符串键并将其与我的 get 参数进行比较。
打印时,它们是相同的,但 java 说它们不相等。
关键字符串来自 UTF-8 编码的文本文件,而参数字符串来自 java Eclipse 文字。
然而,字符是相同的。
问题是什么,我该如何解决?

谢谢!

编辑:

嗯,这是幕后实际发生的事情。
我有一个包含以下内容的 UTF-8 文本文件...

variableIndent,@
equalsIndent,#
spaceChar,
newlineChar,\n
multiplyChar,×
divideChar,÷
plusChar,+
equalsChar,=
subjectChar,:
thusChar,∴

我通过读入文件的每一行作为 ArrayList<String> 来“加载”这个文件元素,通过传递文件的目录:

private static ArrayList<String> readLinesFile(String ResourceFile)  {
ArrayList<String> Lines = new ArrayList<String>();
try{
InputStream fstream = FileManager.class.getResourceAsStream(ResourceFile);
BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
String strLine;
while ((strLine = br.readLine()) != null) {
Lines.add(strLine); }
in.close(); }
catch (Exception e) {
System.out.println("Error: " + e.getMessage()); }
return Lines; }

到目前为止一切都很好。
然后我将此 ArrayList 传递给一个函数,该函数通过“,”字符拆分每个元素(使用个人包中的函数;这绝对不是问题),并将第一部分作为键添加到新的第二部分词典。

private static Map<String, String> generateBaseUnits_Characters_Prefixes(ArrayList<String> FileContent)  {
Map<String, String> BaseUnitsCache = new HashMap<String, String>();
ArrayList<String> currentLine;
for (int i=0; i<FileContent.size(); i++) {
currentLine = MiscellaneousFunctions.splitString(FileContent.get(i), ",");
BaseUnitsCache.put(currentLine.get(0), currentLine.get(1)); }
return BaseUnitsCache; }

这会产生导致所有麻烦的字典。
我有一组与文本文件中的字符名称相对应的关键文字,我用它来访问程序中的字典。

public static String variableIndentKey = "variableIndent";
public static String equalsIndentKey = "equalsIndent";
public static String spaceCharKey = "spaceChar";
public static String newlineCharKey = "newlineChar";
public static String multiplyCharKey = "multiplyChar";
public static String divideCharKey = "divideChar";
public static String plusCharKey = "plusChar";
public static String equalsCharKey = "equalsChar";
public static String subjectCharKey = "subjectChar";
public static String thusCharKey = "thusChar";

问题出在这里:

字典中文本文件的第一行“搞砸了”。它被添加到字典中并在键集和字典的打印格式中正确显示,但尝试访问它返回“null”。
(在这种情况下,它是 variableIndent。如果我将 variableIndent 放在文本文件的其他地方,equalsIndent 就会搞砸,等等)

这是怎么回事!?
我有狡猾的功能吗?!
它们在其他所有方面都运作良好。

谢谢!

最佳答案

将包含键和值的 UTF-8 文本文件更改为不带 BOM 的 UTF-8。三个字节(UTF-8 BOM 0xEF,0xBB,0xBF before "variableIndent")见http://en.wikipedia.org/wiki/Byte_order_mark

关于Java Map 为当前键返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11912744/

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