我遇到的问题是: 我有包含字符串和字符串的地图。当我打印该地图时,我可以看到有一把钥匙 “0-8166-3835-7”。但是当我想要得到它时,没有什么可以归还的,就像找不到匹配一样...... 我的代码:
//Open a stream to read from file with isbn's AND titles
Scanner IsbnTitle = new Scanner(new FileReader("C:/Users/Proskopos/Documents/NetBeansProjects/ReadUrl/IsbnTitle.txt"));
//Create a Map to save both ISBN's and Titles
Map <String,String> IsbnTitleMap = new HashMap();
while(IsbnTitle.hasNext()){
String recordIsbnTitle = IsbnTitle.nextLine();
UrlFunctions.AddToMap(Recognised , recordIsbnTitle, IsbnTitleMap);
}
.....
.....
Set IsbnSet = new HashSet();
while (IsbnFile.hasNextLine()) {
String isbn = IsbnFile.nextLine();
IsbnSet.add(isbn);
}
//Create an Iterator for IsbnSet
Iterator IsbnIt =IsbnSet.iterator();
String suffix = IsbnIt.next().toString();
String OPACIALtitle = UrlFunctions.GetOpacTitle(suffix, IsbnTitleMap);
上面的代码是关于MAP的主要部分,下面是我调用的函数:
static String GetOpacTitle(String opIsbn, Map IsbnTitle) {
String OpacTitle = null;
String isbn = opIsbn;
Map isbnMap = IsbnTitle;
System.out.println(isbn);
if ( isbnMap.containsKey(isbn)){
System.out.println("AAAAAAAAAAAAAAAA");
}
//String tade = isbnMap.get(isbn).toString();
//System.out.println("*************" + tade);
return OpacTitle;
}
static void AddToMap(int Recognise, String recordIsbnfollowed, Map IsbnfollowedMap) {
Map isbnsth = IsbnfollowedMap;
String records = recordIsbnfollowed;
int recs= Recognise;
if (recs == 0 || recs == 3) {
String isbn = records.substring(0, 10);
String title = records.substring(10);
isbnsth.put(isbn, title);
// System.out.println(isbn);
}else if (recs == 1) {
String isbn = records.substring(0, 14);
String title = records.substring(14);
isbnsth.put(isbn, title);
// System.out.println(isbn);
}
}
我无法理解问题出在哪里..也许它就像是来自一个集合的后缀的编码,以及来自地图的密钥?他们都是字符串..不要这么认为.. !!! 所以?你能帮忙吗?
编辑:如果您发现代码难以阅读,我很抱歉:\我会按照您的建议! 但是,如果其他人有同样的问题,那么解决方案就是Brand在下面所说的..(我重新发布)您可能在字符串中有一些空格,您正在从文件中读取并存储在地图中。如果是这种情况,请在将值存储在Map中之前使用String.trim(),并在查询相同的字符串之前使用。 - 布拉德3小时前
谢谢大家
答案 0 :(得分:0)
只是添加我的评论,确定了问题。比较地图中的键时,您必须非常小心空白区域和区分大小写。从文件读取数据时通常会出现这些类型的问题,因为并不总是很清楚正在读取哪些字符。即使查看调试器whitepsace cna也是一个问题。
在将数据存储到地图中之前,请务必通过修剪前导和尾随空格来“规范化”数据。