Java에서는 다음과 같은 문자열이 있습니다.
" content ".
이면에있는 String.trim()
모든 공간을 제거합니까 아니면 각각에 하나의 공간 만 제거합니까?
답변
그들 모두 .
반환 값 : 선행 및 후행 공백이 제거 된이 문자열의 복사본 또는 선행 또는 후행 공백이없는 경우이 문자열.
~ Java 1.5.0 문서에서 인용
(하지만 왜 직접 시도하지 않았습니까?)
답변
소스 코드에서 (디 컴파일 됨) :
public String trim()
{
int i = this.count;
int j = 0;
int k = this.offset;
char[] arrayOfChar = this.value;
while ((j < i) && (arrayOfChar[(k + j)] <= ' '))
++j;
while ((j < i) && (arrayOfChar[(k + i - 1)] <= ' '))
--i;
return (((j > 0) || (i < this.count)) ? substring(j, i) : this);
}
while
볼 수 있는 두 개 는 유니 코드가 공백 문자 아래에있는 시작과 끝의 모든 문자가 제거되었음을 의미합니다.
답변
확실하지 않은 경우 단위 테스트를 작성하십시오.
@Test
public void trimRemoveAllBlanks(){
assertThat(" content ".trim(), is("content"));
}
주의 : 물론 테스트 (JUnit + Hamcrest 용)는 실패하지 않습니다.
답변
그러나 한 가지 지적 할 점은 String.trim이 “공백”이라는 독특한 정의를 가지고 있다는 것입니다. 유니 코드 공백을 제거하지는 않지만 공백을 고려하지 않는 ASCII 제어 문자도 제거합니다.
이 메서드는 문자열의 시작과 끝에서 공백을 제거하는 데 사용할 수 있습니다. 실제로 모든 ASCII 제어 문자도 잘립니다.
가능하다면 유니 코드 공백도 처리하는 Commons Lang의 StringUtils.strip ()을 사용할 수 있습니다 (널 안전함).
답변
String 클래스에 대한 API 를 참조하십시오 .
선행 및 후행 공백이 생략 된 문자열의 복사본을 반환합니다.
양쪽의 공백이 제거됩니다.
참고 trim()
문자열 인스턴스를 변경하지 않습니다, 그것은 새로운 객체를 반환합니다 :
String original = " content ";
String withoutWhitespace = original.trim();
// original still refers to " content "
// and withoutWhitespace refers to "content"
답변
자바 문서를 기반으로 여기 는 .trim()
일반적으로 공백으로 알려져을 대체 ‘\ u0020’.
그러나 ‘\ u00A0′( Unicode NO-BREAK SPACE
)도 공백으로 간주됩니다..trim()
제거하지 않습니다. 이것은 특히 HTML에서 일반적입니다.
그것을 제거하려면 다음을 사용합니다.
tmpTrimStr = tmpTrimStr.replaceAll("\\u00A0", "");
답변
trim()
공백을 제거하는 Java의 예 :
public class Test
{
public static void main(String[] args)
{
String str = "\n\t This is be trimmed.\n\n";
String newStr = str.trim(); //removes newlines, tabs and spaces.
System.out.println("old = " + str);
System.out.println("new = " + newStr);
}
}
산출
old =
This is a String.
new = This is a String.