Tôi đang gặp một vấn đề rất khác thường.
Về cơ bản, tôi đang cố gắng lấy giá trị được liên kết với một khóa từ một Bản đồ các chuỗi thành các chuỗi.
Tôi biết rằng khóa tôi đang sử dụng hiện diện; Tôi đang sử dụng cùng một chuỗi tôi đã sử dụng để đặt nó vào!Bản đồ Java trả về giá trị rỗng cho một khóa hiện tại
Tôi đã báo cáo in trên tất cả các mã của tôi, và đây là trường hợp tôi có ...
Đây là từ điển của tôi characterDictionary
{thusChar=∴, spaceChar= , plusChar=+, equalsIndent=#, multiplyChar=×, equalsChar==, newlineChar=\n, divideChar=÷, subjectChar=:, [email protected]}
Mấu chốt cuối cùng "variableIndent" là rắc rối!
Dưới đây là các mã ...
System.out.println ( characterDictionary.get("variableIndent"));
mà không thích hợp kết quả đầu ra: null
Tôi đã kiểm tra, hai lần kiểm tra và ba kiểm tra mã của tôi.
Hoàn toàn không có sự khác biệt giữa khóa "biếnIndent" và đối số chuỗi của characterDictionary.get("variableIndent")
, nhưng nó hoạt động như thể phím này không có mặt.
Tôi hoàn toàn có thể đảm bảo khóa này có mặt và hai chuỗi giống hệt nhau.
Tất cả các yếu tố khác (những yếu tố tôi đã kiểm tra; khoảng 3 từ trước đến nay) của từ điển được truy xuất như bình thường. Tại sao "variableIndent" với giá trị "@" đang phát?
Bạn có thể nhận thấy từ điển chứa các ký tự không phải ASCII, như "thusChar". Điều này có thể liên quan?
Cảm ơn
(Điều này có vẻ như một vấn đề rất đơn giản và tầm thường, như thể tôi đã thực hiện một số sai lầm đáng thương ngớ ngẩn, nhưng nhưng tôi chỉ không thể giải quyết nó!)
EDIT:
Được rồi, đây là một điều gì đó về mã hóa.
Tôi lấy khóa chuỗi từ từ điển và so sánh nó với đối số nhận được của tôi.
Khi in, chúng giống hệt nhau, nhưng java nói rằng chúng không bằng nhau.
Chuỗi khóa đến từ một tệp văn bản được mã hóa UTF-8, trong khi chuỗi đối số đến từ một chữ java Eclipse.
Tuy nhiên, các ký tự giống hệt nhau.
Sự cố là gì và cách tôi có thể giải quyết vấn đề này?
Cảm ơn!
EDIT:
Hmmm, đây là những gì thực sự xảy ra đằng sau hậu trường.
Tôi có tệp văn bản UTF-8 có chứa nội dung sau ...
variableIndent,@
equalsIndent,#
spaceChar,
newlineChar,\n
multiplyChar,×
divideChar,÷
plusChar,+
equalsChar,=
subjectChar,:
thusChar,∴
tôi 'tải' tập tin này bằng cách đọc trong mỗi dòng của tập tin như một yếu tố ArrayList<String>
, bằng cách thông qua các thư mục của tập tin:
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; }
Mọi thứ đều tốt lên đến đây.
Sau đó, tôi chuyển ArrayList này vào một hàm tách từng phần tử bằng ký tự "," (sử dụng hàm từ gói cá nhân; Nó chắc chắn không phải là vấn đề) và thêm phần đầu tiên làm khóa cho phần tử thứ hai từ điển mới.
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; }
và điều này tạo ra từ điển gây ra tất cả sự cố.
Tôi có một bộ Key Literals tương ứng với tên ký tự trong các tệp văn bản mà tôi sử dụng để truy cập từ điển trong chương trình.
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";
đây là vấn đề:
Dòng trên cùng của 'vít lên' textfile trong từ điển. Nó được thêm vào từ điển và xuất hiện chính xác giữa các keySet và định dạng in của từ điển, nhưng cố gắng truy cập nó trả về "null".
(Trong trường hợp này, đó là biếnIndent. Nếu tôi đặt biếnIndIndent ở một nơi khác trong tệp văn bản, bằng ốc vít Hiện tại lên, v.v.)
Điều gì đang xảy ra !?
Tôi có chức năng tinh nghịch không ?!
Họ đã làm việc tốt cho mọi thứ khác.
Cảm ơn!
Để đảm bảo khóa này hiện diện, hãy lặp lại tất cả các phím trong bản đồ này và in giá trị của chúng. –
Bạn có thể cho thấy một số tái tạo hành vi không? – assylias
đã chỉnh sửa OP. Tin rằng nó là một vấn đề mã hóa giữa một textfile và Eclipse. –