У меня очень необычная проблема.
По сути, я пытаюсь получить значение, связанное с ключом, из карты строк в строки.
Я знаю, что ключ, который я использую, присутствует; Я использую ту же самую строку, которую я использовал, чтобы вставить ее!
Я печатаю операторы по всему коду, и в этом случае у меня есть...
Вот мой словарьсловарь символов
{thusChar=∴, spaceChar=, plusChar=+, equalsIndent=#, multiplyChar=×, equalsChar==, newlineChar=\n, divideChar=÷, subjectChar=:, variableIndent=@}
Самый последний ключ "variableIndent" - это беда!
Вот код...
System.out.println ( characterDictionary.get("variableIndent") );
который неправильно выводит:null
Я проверил, дважды проверил и трижды проверил свой код.
Нет абсолютно никакой разницы между клавишей"variableIndent"и строковый аргумент characterDictionary.get("variableIndent")
, но он ведет себя так, как будто этот ключ отсутствует.
Я могу абсолютно гарантировать, что этот ключ присутствует и что две строки идентичны.
Все остальные элементы (те, что я проверил; около 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";
ВОТ ПРОБЛЕМА:
Верхняя строка текстового файла «закручивается» в словаре. Он добавляется в словарь и правильно отображается среди набора ключей и печатного формата словаря, но попытка доступа к нему возвращает «ноль».
(В данном случае это переменнаяIndent. Если я помещу variableIndent в другое место в текстовом файле, equalsIndent облажается и т. д.)
Что происходит!?
У меня есть хитрая функция?!
Они хорошо работали для всего остального.
Спасибо!