2014-04-13 3 views
-1

내가 원하는 것은 파일을 읽는 것이고 텍스트는 data []라는 문자열 배열에 저장됩니다. data [3]에는 "Warning Lights are red"또는 "Warning Lights are green"중 하나가 포함되어야하며, 손상된 경우에는 던져 넣기를 원하는 사용자 정의 예외가 정의되어 있지 않습니다. 다음과 같이 내 코드는 다음과 같습니다예외가 항상 throw됩니다.

if(data[3].equals("Warning Lights are red")){ 
      //do something 
     } 
     else if(data[3].equals("Warning Lights are green")){ 
      //do something 
     } 
     else if(!data[3].equals("Warning Lights are red") && !data[3].equals("Warning Lights are green")){ 
      throw new FileCorruptionException("Unfortunately the status file was corrupted, please try printing to the file again to fix this issue."); 

     } 

을 나는 데 문제가 FileCorruptionException 항상 데이터 [3] 실제로 동일한 경우에도 발생되고 있다는 것입니다 중 경고등이 녹색 ""경고등은 빨간색 "또는 ", 나는 이것을 확인하기 위해 텍스트 파일을 체크했다. 나는 논리적 인 오류가 있다고 생각하지만 그것이 무엇인지 알지 못한다. 모든 제안을 부탁드립니다.

+1

아마도 'data [3]'에는 생각하는 내용이 포함되어 있지 않을 수 있습니다. 확인을 위해 값과 길이를 출력 했습니까? –

+2

가짜 공백이 있는지 확인하십시오. – Stewart

+0

질문에서 주장한 것 중 적어도 하나가 사실 일 수는 없습니다. 그렇지 않으면 코드가 예상대로 실행됩니다. 이 문제를 좀 더 철저하게 조사하려면이 것을 [최소 테스트 케이스] (http://stackoverflow.com/help/mcve)로 줄여야합니다. –

답변

2

줄 끝에 새 줄과 같은 공백이있을 수 있습니다. 공백이 있는지 확인하려면이 시도 :

System.out.print(":" + data[3] + ":") 

당신은 선행 및 후행 공백을 제거 String.trim을 사용할 수

if (data[3].trim().equals() ... 
2

이것은 어휘 문제 일 가능성이 큽니다. 조건부 및 공백에있는 공백의 차이는 아마도 data[3] 일 것입니다. data[3] 문자열에 빨강/녹색 뒤에 추가 공백이 있는지 확인하십시오. 희망이 도움이됩니다.

편집 : 고려해야 할 다른 사례가없는 경우 else if 대신 else을 사용하여 예외를 throw 할 수 있습니다.

1

String.equalsIgnoreCase() 대신 String.equals()으로 봅니다. 몇 가지 사례가있을 수 있습니다.

마지막으로 else if에 수표를 넣을 필요가 없습니다. 처음 두 조건에서 이미 확인했기 때문입니다.

 if(data[3].equalsIgnoreCase("Warning Lights are red")){ 
     //do something 
    } 
    else if(data[3].equalsIgnoreCase("Warning Lights are green")){ 
     //do something 
    } 
    else{ 
     throw new FileCorruptionException("Unfortunately the status file was corrupted, please try printing to the file again to fix this issue."); 
    } 
관련 문제