2017-10-27 19 views
1

을 제거합니다. java의 String.trim()은 ascii 값이 20 (공백)보다 작거나 같은 모든 문자를 제거합니다.String.trim()은 Java의 공백뿐만 아니라

자바 대신 전용 공간 (아스키 문자 20)

public String trim() { 
    int len = count; 
    int st = 0; 
    int off = offset;  /* avoid getfield opcode */ 
    char[] val = value; /* avoid getfield opcode */ 

    while ((st < len) && (val[off + st] <= ' ')) { 
     st++; 
    } 
    while ((st < len) && (val[off + len - 1] <= ' ')) { 
     len--; 
    } 
    return ((st > 0) || (len < count)) ? substring(st, len) : this; 
} 
+0

이 제거 * 공백 * 또한'캐리지 리턴 많은 다른 문자를 포함 '또는'line break' 등 – Lino

+0

선행 및 후행 공백이 제거 된이 문자열의 복사본을 반환하거나 선행 공백이나 후행 공백이없는 경우이 문자열을 반환합니다. 그래서 첫 성명서가 잘못되었습니다. – JKostikiadis

+0

공백은 20이 아닌 ASCII 문자 코드 32입니다. –

답변

8

을 제거하는 것을 ""공백 문자 외에, 공간을 갖는 여러 가지 방법이 있기 때문에 것을 왜 그랬는지 어떤 생각. 인용 부호 : javadoc :

앞뒤 공백이 생략 된 문자열의 사본을 리턴합니다.

Javadoc가 여기에 분명하다 : 그것은 약 공간하지만 공백 없습니다. "비어있는"것으로 표시 될 것이지만 실제로는 다른은 빈 문자열입니다.

즉, 이것은 편리한 방법입니다. 이러한 방법은 사용자가 필요로하거나 기대하는 기능을 제공하도록 설계되었습니다.

trim() 공백 만 작동시키는 방법을 제공하는 것은 절대적으로 역설적입니다.

매우 일반적인 시나리오는 일부 문자열을 수신하는 것입니다. 사용자가 입력 할 수 있으며, 파일에서 읽고 전체 줄을 나타낼 수 있습니다. 뒤 따르는 탭, 공백, 줄 바꿈 문자에는 관심이 없습니다. 따라서 Java 언어의 아버지는 이러한 모든 다른 문자를 쉽게 제거 할 수있는 방법을 제공합니다. 대신 당신이 trimSpaces(), trimTabs(), trimNewLines() 등을 호출하는 쪽.

+2

"보이는 캐릭터가 아닙니다"라는 용어를 사용하여 유사한 글을 올리려고했지만이 역시 효과가 있습니다! – AxelH

+1

당신은 대단히 환영합니다 ;-) – GhostCat

+0

"공백"은 1970 년 이후에 공통의 의미를 가지고 있습니다. –

1

공간에 대한 ASCII 문자 코드가 실제로 32이 아니라 20입니다하지만 당신은 (32) 앞에 오는 문자의 종류를 보면 당신은 많은 종류의를 찾을 수의 탭 및 캐리지 리턴과 같은 공백. 가정은 평균적인 사용자가 문자열을 둘러싼 공백을 모두 제거하려는 것입니다. 당신만을 선택적으로 공간을 정돈하는 데 사용할 수있는 한 줄은

여기 @GhostCat에 의해 주어진 답을 완성하는 것입니다

String input = " Hello World! "; 
input = input.replaceAll("[ ]*(.*)[ ]*", "$1"); 
+1

하나의 upvote, 두 줄의 코드 ;-) – GhostCat