2011-11-04 4 views
1

다음과 같은 문제점이 있습니다 : 문자열과 문자열을 포함하는 맵이 있습니다. 그지도를 인쇄 할 때 나는 "0-8166-3835-7"키가 있다는 것을 알 수 있습니다. 내가 그것을 얻기 위해 노력하고 있어요 때, 발견 일치하는 등의 반환하려면 아무것도, 없다 ... 내 코드 :Java Map Matching Key

//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); 
     } 
    } 

내가 어디에 문제가 이해하지 못할 .. 아마 접미사의 인코딩과 같은 무언가 세트에서 cames, 그리고지도에서 키? 그들은 둘 다 문자열입니다 .. 그렇게 생각하지 않아 .. !!! 그래서? 도울 수 있니?

편집 : 코드를 읽기가 어려울 경우 trully 죄송합니다 : \ 귀하의 조언을 따를 것입니다! 하지만 다른 사람이 ... 해결책은 무엇 브랜드 아래 말했다 같은 문제가있는 경우에 (내가 다시 포스트를) 당신은 아마 당신이 양식을 파일을 읽고 저장하는 문자열의 일부 공백이

지도에서. 이 경우 Map에 값을 저장하기 전에 String.trim()을 사용하고 동일한 문자열을 쿼리하기 전에 String.trim()을 사용하십시오. - 브래드 시간 전

그냥 문제를 확인 내 댓글에 추가 할 모든

+2

코드가 IsbnFile의 출처가 아님 ... 일반적인 Java 명명 규칙을 따르면 코드가 훨씬 읽기 쉬울 것입니다. –

+2

Jon이 말한 것처럼 : 소문자로 변수를 작성하십시오. 실수로 잘못 코딩되지 않습니다. -/읽기가 매우 혼란 스럽습니다. 메서드 이름과 동일하지만 소문자 여야합니다. 실제로 인코딩에 문제가있을 수 있습니다. 키가 비슷한 방법으로 만들어 졌는지 확인하십시오 (UTF-8과 Windows 인코딩 파일 중 하나를 읽지 않음). –

+3

파일을 읽고 맵에 저장하는 문자열에 공백이있을 수 있습니다. 이 경우 Map에 값을 저장하기 전에 String.trim()을 사용하고 동일한 문자열을 쿼리하기 전에 String.trim()을 사용하십시오. – Brad

답변

0

감사드립니다. 지도에서 키를 비교할 때 공백과 대소 문자를 구분할 때 매우주의해야합니다. 이러한 유형의 문제는 일반적으로 파일에서 데이터를 읽을 때 발생합니다. 왜냐하면 어떤 문자가 읽혀지고 있는지 항상 명확하지 않기 때문입니다. 심지어 디버거 whitepsace cna에서 문제를 찾고 있습니다.

지도에 저장하기 전에 항상 공백 문자를 잘라내어 "표준화"하십시오.