2011-07-30 3 views
1

내 프로그램에서 읽고 리소스에 대한 파일을 구문 분석합니다.텍스트 파일에서 읽고 텍스트를 비교 - Java

나는 다음 다른 문이 알려진 유형의 일치 여부를 확인하고 그렇지 않은 경우 오류가 발생하는 경우 간단하게 할, 자원 유형을 나타내는 문자열을 추출 :

if(type.toLowerCase() == "spritesheet") { 
    _type = ResourceType.Spritesheet; 
} else if(type.toLowerCase() == "string") { 
    _type = ResourceType.String; 
} else if(type.toLowerCase() == "texture") { 
    _type = ResourceType.Texture; 
} else if(type.toLowerCase() == "num") { 
    _type = ResourceType.Number; 
} else { 
    throw new Exception("Invalid Resource File - Invalid type: |" + type.toLowerCase() + "|"); 
} 

내 나쁜 이름을 무시 나는이 호출 전에 유형 "spritesheet"를 설정하면 비 Descript를 예외,이 문은 항상 등 유형이 파일에서 읽을 때 "spritesheet"있는 경우에도, 다른 최종

java.lang.Exception: Invalid Resource File - Invalid type: |spritesheet| 
at Resource.Load(Resource.java:55) //Final else. 

을 것입니다 그것은 작동하므로 어떤 종류의 인코딩 오류가 있는지 궁금합니다. 내가 :)

답변

7

type이 String의 가정 간단한 뭔가를 누락 될 수 있도록

나는 자바에서 많은 작업을 완료하지 않은, 당신은 평등에 대한 테스트 String.equals()를 사용하고 싶습니다. == 연산자를 사용하여 변수가 동일한 객체에 대한 참조인지 확인합니다.

또한 생활을 편리하게하기 위해 toLowerCase()을 호출하지 않으므로 String.equalsIgnoreCase()을 사용하시기 바랍니다.

+1

감사합니다. P – Blam

+0

@Blam 나는 대부분의 사람들이 적어도 한 번은 그렇게했다고 생각합니다. Hack, 몇 년 동안 전문적인 Java 개발을 해왔지만 아직도하고 있습니다. that on occasion : – Jon7

+0

'=='와 함께'String'을 사용하는 것은 새로운 자바 프로그래머를 잡는 것들 중 하나입니다. 문자열 불변성으로 인해 자체 포함 된 프로그램을 작성할 때 종종 잘 작동하지만 실패 할 경우에는 실패합니다. @ 존은 올바른 답을 가지고 있으며 받아 들여야합니다. 여기에 약간의 자바 재미가있다. 위의 코드는 각 비교를'type.toLowerCase(). intern() == ...'으로 변경했다면 효과가 있었다. 나는 네가 그렇게한다고 제안하는 것이 아니고 너를 생각해라. – Paul

2

자바 7부터 시작하면 switch 문에 문자열을 사용할 수 있습니다! :)

다음은 작동합니다 :

나는 아직 그것을 시도하지 않은
switch (type.toLowerCase()) { 
    case "spritesheet": _type = ResourceType.Spritesheet; break; 
    case "string":  _type = ResourceType.String;  break; 
    case "texture":  _type = ResourceType.Texture;  break; 
    case "num":   _type = ResourceType.Number;  break; 

    default:    throw new Exception("Invalid Resource File " + 
         "- Invalid type: |" + type.toLowerCase() + "|"); 
} 

, 내가 어떻게되는지 알려주세요!

관련 문제