2016-09-15 4 views
-1

Eclipse에서 디버깅하는 동안 이상한 현상이 발생했습니다. 다음 메소드를 디버깅 중입니다. 상기 방법 내 두번째 라인에서 Eclipse에서 Java 디버깅 : 이상한 오류 : StringIndexOutOfBoundsException

private String parseMessage(String msg, String uptoWord) { 
    String adjusted = msg.replaceAll("(\r?\n|\r)", " ").trim(); 
    adjusted = adjusted.substring(0, adjusted.length() - uptoWord.length()).trim(); 
    return adjusted; 
} 

는 (조정 = msg.replaceAll ("(R \ \ n | \ R)?", "") .trim();) I의 값을 확인할 때 과제의 오른편에 내가 기대하는 원하는 가치를 얻습니다. 그러나 다음 줄 (return 문)으로 넘어갈 때 조정 된 값은 공백 ("")이됩니다. 따라서 프로그램은 다음 예외를 반환합니다. return 문에서 값이 변경되는 이유를 이해할 수 없습니다. 어떤 아이디어? 때문에 beginIndex 및 endIndex에 나쁜 값의 Java docs for subString 당으로

java.lang.StringIndexOutOfBoundsException: String index out of range: -8 
    at java.lang.String.substring(Unknown Source) 
    at com.emdi.sl3.server.emailConnector.EmailListenerOrderCreate.parseMessage(EmailListenerOrderCreate.java:65) 
    at com.emdi.sl3.server.emailConnector.EmailListenerOrderCreate.XMLCreate(EmailListenerOrderCreate.java:57) 
    at com.emdi.sl3.server.emailConnector.EmailConnectorEWS.run(EmailConnectorEWS.java:77) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) 
    at java.util.concurrent.FutureTask.run(Unknown Source) 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(Unknown Source) 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 
+0

입력 내용을 보지 않고도 의미있는 대답을 줄 수 있다고 생각합니다. 아마도'String # substring'이 어떻게 작동하는지 알 수 없을 것입니다. 첫 번째 인덱스는 _inclusive_입니다. 즉, 'adjusted'의 첫 번째 문자가 포함되었습니다. 그러나 두 번째 인덱스는 _exclusive_입니다. –

+0

@TimBiegeleisen :이 문제를 해결할 수 있었지만 문제는 코드와 관련이 없습니다. 나는 "개미 청소"를했고 예상대로 작동하기 시작했습니다. 따라서 문제는 클래스 파일이 일치하지 않는 것입니다. – Sudo

답변

1

, 당신은 그 오류를 얻고있다.

IndexOutOfBoundsException - if the beginIndex is negative, or endIndex is larger than the length of the String object, or beginIndex is larger than endIndex

.

0

upToWord 문자열이 adjusted 문자열보다 긴 경우 음수 인 end-bound 매개 변수를 사용하면 substring이됩니다. 그 예외를 던짐으로써, String은 당신이 그 매개 변수로 나쁜 시간을 갖게 될 것이라고 말하고 있습니다.

0

uptoWord의 길이가 조정 된 길이보다 큰 경우 시나리오를 처리해야합니다. 음의 색인은 부분 문자열 메소드가 실패하게합니다.

0

모든 입력에 감사드립니다. 그러나이 문제는 코드에서 간단한 오류가 아닙니다. 나는이 문제를 해결하기 위해 많은 노력을 기울 였고 명백하게 "개미 청소"를 실행하여이 문제를 해결했습니다. 따라서 문제는 일부 남은/불일치 클래스 파일입니다.