基本上,我正在尝试从字符串映射到字符串的Map中获取与键相关联的值。
我知道我使用的键存在; 我使用的是放入它的相同字符串!
我在我的代码中添加了许多打印语句,这就是我的情况...
这是我的字典characterDictionary
{thusChar=∴, spaceChar= , plusChar=+, equalsIndent=#, multiplyChar=×, equalsChar==, newlineChar=\n, divideChar=÷, subjectChar=:, variableIndent=@}
最后一个关键字“variableIndent”是麻烦的地方!
下面是代码...
System.out.println ( characterDictionary.get("variableIndent") );
出现了不恰当的输出:null
我仔细检查了代码,多次核对和三思,但是"variableIndent"这个键和characterDictionary.get("variableIndent")
方法的字符串参数之间绝对没有任何区别,但某些情况下它的表现好像这个键并不存在。
我可以绝对保证这个键确实存在,并且这两个字符串是完全相同的。只有“variableIndent”与其“@”值有问题,而其他元素(目前为止我已经检查了大约3个)都可以正常检索。这是为什么呢?
你可能会注意到字典中包含非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";
问题如下:
文本文件的顶部行在字典中出现了问题。 它被添加到字典中,并且在keySet和字典的打印格式中正确显示,但尝试访问它会返回“null”。 (在这种情况下,它是variableIndent。如果我将variableIndent放在文本文件的其他位置,则equalsIndent会出现问题,等等)
发生了什么!?
我的函数有问题吗?!
它们在其他所有方面都运行良好。
谢谢!