[java] Java String.trim ()은 몇 개의 공백을 제거합니까?

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 &nbsp; )도 공백으로 간주됩니다..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.