2012-09-04 2 views
1

특정 String xmlMatch에 대해 Hashtable을 검색하는 데 문제가 있습니다. 이것은 특정 div 태그의 내용에서 파생되었습니다.Hashtable에서 문자열 검색 - Java

XML을 검색하고 String xmlMatch를 정의하는 데 사용하는 코드가 포함되어 있습니다. 나는 이것이 옳다고 믿으며 화면에 그것을 인쇄함으로써 보여 주었다. 나는 이것이 단순해야 함을 안다. 빠른 테스트 Hashtable을 만들었으며 같은 것을 사용합니다.

내 테스트 코드

일 -

DOS

사실 이클립스의 콘솔에 다음과 같은 예상대로

String xmlMatch2 = "Two"; 
Hashtable<String, String> table2 = new Hashtable <String, String>(); 
table2.put("One", "Uno"); 
table2.put("Two", "Dos"); 
table2.put("Three", "Tres"); 

System.out.println(table2.containsKey(xmlMatch2)); 
String n = table2.get("Two"); 
System.out.println(n); 

작품

작동 인쇄

내 생산 CODE -

작동하지 않음
if(startPosition >1)    
{ 
    out.println("startPosition is greater or equal to 1 "); 

    int subStringIndex = startPosition + startTag.length(); 
    subStringIndex = subStringIndex + 2; // +2 is necessary to remove "> after sliceXML    
    out.println(subStringIndex); 

    int endPosition = testContent.indexOf(endTag, subStringIndex); 
    out.println(endPosition); 

    if(endPosition >= startPosition) 
    { 

    xmlMatch = testContent.substring(subStringIndex, endPosition); 
    //out.println("This is my xmlMatch " + xmlMatch); //prints Florida 
    } 
,

(활성화) 위의 인쇄 문은 xmlMatch 난 후 간단한 해시 테이블

내 문제가 시작하는 곳입니다
Hashtable<String, String> table = new Hashtable<String, String>(); 
    table.put("Florida","/PathToFile.txt"); 
    table.put("Telescope","/PathToFile2.txt"); 
    table.put("Galaxy","/PathToFile3.txt"); 

을 구현 플로리다

되었음을 확인 화면에 거짓

out.println(table.containsKey(xmlMatch)); 

위의 인쇄 문 인쇄 - 난 플로리다는 해시 테이블에 같아지는 것이 xmlMatch true로 인쇄해야합니다 생각합니다.

String n = table.get(xmlMatch); 
out.println(n); 

그리고는 null 인쇄 -이 인쇄한다고 생각 나는 단순히 그러나이 경우

/PathToFile.txt이

out.println(xmlMatch); 

그것은 다시 한 번 화면

에 플로리다를 인쇄 내가 도대체 ​​뭘 잘못하고있는 겁니까? 나는 단순히 Hashtable에서 특정 String을 검색 할 수 있기를 원한다. 어떤 도움도 언제나처럼 대단히 감사합니다.

편집 : 대문자와 관련된 문제가 있거나 어쩌면 내 xmlMatch가 추가 공백 문자를 전달할 수 있습니까? 예 : "플로리다"

EDIT 2 내 XML을 div 태그는 단순히 솔루션 AROUND

<sliceXML>Florida</sliceXML> 

WORK 임은 아니지만 내가 묻는 질문에 대한 문제에 대한 해결책이 여기에이 추가를 읽고 .

Joe K 내 endTag를 확인한 결과, 슬래시를 올바르게 인코딩 할 수 없었습니다. 나는 대답을 주위에 내 작품을 게시했습니다 here

+3

'System.out.println ("Florida".equals (xmlMatch))'가 true를 확인 했습니까? 예를 들어 추가 공간이있을 수 있습니다. – assylias

+1

내용이 div 태그에 있다고 언급하셨습니다. out.println (xmlMatch.length())의 결과를 지적하십시오. 나는 당신이 문자열에 숨어있는 공간이 있을지도 모른다고 생각합니다. 문자열 앞뒤의 공백을 제거하는 xmlMatch.trim()과 일치시켜야합니다. – randominstanceOfLivingThing

+0

@ assylias 방금 확인한 결과 - false를 인쇄합니다. 그러나 out.println (xmlMatch)을 시도해보십시오. 플로리다가 인쇄되어 있습니다. 아래 Joao Silva가 제안한 것처럼 xmlMatch를 자르려고했지만 여전히 화면에 null이 인쇄됩니다. 이것이 문제의 결합일까요? – Deepend

답변

0

당신은 흰 공백을 확인 했습니까 ???xmlMatch를 자르고 다시 시도하십시오. 당신의 xmlMatch

2

당신은 아마 공백을 가지고, 그들을 제거 trim()를 사용

String n = table.get(xmlMatch.trim()); 
out.println(n); 
+0

불행히도 이것은 아무런 차이가 없으며, 미래를 알기위한 좋은 속임수입니다, 건배;) – Deepend

0

는 "플로리다".intern()와 함께 사용해 볼 수 있습니까?

+1

어떻게 도움이 될까요? hashmaps는'equals()'메쏘드를 내부적으로 사용합니다. –

+0

@ ColinD 동의해야합니다. 그러나, JDK의 하위 버전 중 일부에는 문자열 풀 누수가 있습니다 (나는 언젠가 다시 그것을 직면하고 그것을 파악하기 위해 많은 시간이 필요했습니다). 코드를 검사하기 전에 JDK 버전의 문제인지 확인하고 싶었습니다. – Chris

+0

방금 ​​out.println ("florida.intern());을 시도하여 플로리다를 화면에 인쇄합니다. 플로리다가 소문자 f로 인쇄됩니다. 내가 믿어야 만하니? – Deepend

0

Java 문자열은 C 배열과 마찬가지로 인덱스 0으로 시작합니다. 또한 일부 XML serializer/deserializer는 태그를 smallcaps하는 경향이 있습니다. 그래서, XML 파일과 같은 :

<Firefox>xxxx</Firefox> 

것이다 마술이된다 :

<firefox>xxxxx</firefox> 

AFAIK는, XML 파일의 태그는 대소 문자를 구분합니다. 어쨌든, 가능한 경우 하단 및 상단 뚜껑을 확인하십시오.

오, 예 : 태그에 여분의 공백이 생길 수 있습니다. 모든 것에 조심하십시오.

마지막 조언 : 자바를 사용하고 있기 때문에 SAX를 사용할 수 있습니다.

관련 문제