2012-09-09 3 views
-1

나는 이전에 질문을했지만 가혹한 비판을 받았으므로 여기에 다시 올립니다. 이전에 내가 부탁 한 방식에 대해 우려해 왔던 사람들에게 더 간단하고 간결하게 설명해 주었다.자바의 trim() 메소드에 대한 질의

배경 일부 HTML 정보를 구문 분석하고 있습니다. 나는 일련의 모든 줄에서 모든 것을 분리했지만, 나는 그 내용을 얻기를 원합니다. 공간을 없애기 위해 trim()을 사용하기로 선택했지만 문제가 발생했습니다. 내 코드의 마지막 몇 줄은 시험이다 :

System.out.println("'" + someString + "'\n'" + someString.trim() + "'"); 

결과였다 :

'Sophomore                                          ' 
'Sophomore                                          ' 

나는 우리 모두가 할 때부터, 나는 트림()를 호출 된 방법에 문제가있을 수 있습니다 걱정했다 때때로 실수, 내가 이런 식으로 테스트 있도록 :

String s = " hello   "; 
System.out.println("'" + s+ "'\n'" + s.trim() + "'"); 

결과는 같다 :

' hello  ' 
'hello' 

내 질문 내가 뭘 잘못하고 있니? 내가 원하는 건 'Sophomore'가 아니라 'Sophomore'를 얻는 것입니다.

나는 진심으로 감사합니다. 미리 감사드립니다!

+6

무엇이 질문입니까? – oldrinb

+0

@ oldrinb, 질문이 편집되었습니다. –

+0

내 downvote 아니지만 링크가 필요합니다. –

답변

3

String.trim()specifically only removes 문자가 코드가 \u0020을 초과하는 첫 문자 앞에 나오고 마지막 문자 다음에 오는 문자입니다.

모든 가능 공백 문자를 제거하기에 충분하다 - 유니 코드가 여러 개 .trim() 일치하지 않습니다 (\u0020 위의 코드 포인트)를 정의합니다.

아마도 공백 문자는 생각하는 문자가 아닙니다.

편집 의견은 추가 문자 구체적으로, 실제로 유니 코드 "비 분리 공백"입니다 \u00a0을 "특별한"공백 문자 것으로 확인된다. 정상 공백이있는 사람을 대체하기 위해 사용

str = str.replace('\u00a0', ' '); 
+0

감사합니다. 그럴 수 있습니다. 나는 이것을 잠시 생각 해왔다. 그들은 무엇을 할 수 있었느냐? 그들이 공백이 아니라면, 왜 그들은 그것들처럼 보이나요 ?? –

+0

동의합니다. 그가 우리에게 보여주지 않은 중요한 것은 오류를 보여주는 작은 테스트 케이스 데이터와 같은 사전 처리 된 텍스트입니다. 1+ –

+0

@OlinKirkland는 문자열을 루핑하고'codePointAt'를 사용하여 각 문자 값을 찾습니다. 예를 들어, 대체 유니 코드 문자 일 수 있습니다. – Alnitak

1

소스 문자열에 공백이 아닌 문자가 있어야합니다. 코드에 다음을 추가하고 인쇄 내용을 확인하십시오.

for (char ch : someString.toCharArray()) { 
    System.out.print(Integer.toHexString(ch) + " "); 
} 
+0

알 니탁의 대답에 대화에 참여하십시오. 나는 거기에 후속 정보를 게시하고있다. –