Java에서는 다음과 같은 문자열이 있습니다.
" content ".
이면에있는 String.trim()
모든 공간을 제거합니까 아니면 각각에 하나의 공간 만 제거합니까?
Java에서는 다음과 같은 문자열이 있습니다.
" content ".
이면에있는 String.trim()
모든 공간을 제거합니까 아니면 각각에 하나의 공간 만 제거합니까?
답변:
그들 모두 .
반환 값 : 선행 및 후행 공백이 제거 된이 문자열의 복사본 또는 선행 또는 후행 공백이없는 경우이 문자열.
~ Java 1.5.0 문서에서 인용
(하지만 왜 직접 시도하지 않았습니까?)
Chararacter.isWhitespace
하는 것은 아닙니다 ..
trim
, isWhiteSpace
등, 또는 자바 문서의 모호성에 대한 설명; 위에서 질문 한 특정 질문에 대한 간단한 대답입니다. 즉, trim
방법이 단일 공백 또는 다중 공백을 제거합니까?
소스 코드에서 (디 컴파일 됨) :
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
볼 수 있는 두 개 는 유니 코드가 공백 문자 아래에있는 시작과 끝의 모든 문자가 제거되었음을 의미합니다.
그러나 한 가지 지적 할 점은 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.
자바 문서 (문자열 클래스 소스)에서,
/**
* Returns a copy of the string, with leading and trailing whitespace
* omitted.
* <p>
* If this <code>String</code> object represents an empty character
* sequence, or the first and last characters of character sequence
* represented by this <code>String</code> object both have codes
* greater than <code>'\u0020'</code> (the space character), then a
* reference to this <code>String</code> object is returned.
* <p>
* Otherwise, if there is no character with a code greater than
* <code>'\u0020'</code> in the string, then a new
* <code>String</code> object representing an empty string is created
* and returned.
* <p>
* Otherwise, let <i>k</i> be the index of the first character in the
* string whose code is greater than <code>'\u0020'</code>, and let
* <i>m</i> be the index of the last character in the string whose code
* is greater than <code>'\u0020'</code>. A new <code>String</code>
* object is created, representing the substring of this string that
* begins with the character at index <i>k</i> and ends with the
* character at index <i>m</i>-that is, the result of
* <code>this.substring(<i>k</i>, <i>m</i>+1)</code>.
* <p>
* This method may be used to trim whitespace (as defined above) from
* the beginning and end of a string.
*
* @return A copy of this string with leading and trailing white
* space removed, or this string if it has no leading or
* trailing white space.
*/
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;
}
시작과 길이를 얻은 후에는 String 클래스의 하위 문자열 메서드를 호출합니다.
trim()
모든 선행 및 후행 공백을 제거합니다. 하지만주의하세요 : 문자열은 변경되지 않습니다. trim()
대신 새 문자열 인스턴스를 반환합니다.
문자열 입력이 다음과 같은 경우 :
String a = " abc ";
System.out.println(a);
예, 출력은 "abc"입니다. 그러나 문자열 입력이 다음과 같은 경우 :
String b = " This is a test "
System.out.println(b);
Output will be This is a test
So trim은 문자열에서 첫 번째 문자 앞과 마지막 문자 뒤의 공백 만 제거하고 내부 공백을 무시합니다. 이것은 String
내부 공간을 제거하고 문자열의 첫 번째와 마지막 문자 앞뒤의 공백을 제거 하는 내장 트림 메서드 를 약간 최적화하는 코드입니다 . 도움이 되었기를 바랍니다.
public static String trim(char [] input){
char [] output = new char [input.length];
int j=0;
int jj=0;
if(input[0] == ' ' ) {
while(input[jj] == ' ')
jj++;
}
for(int i=jj; i<input.length; i++){
if(input[i] !=' ' || ( i==(input.length-1) && input[input.length-1] == ' ')){
output[j]=input[i];
j++;
}
else if (input[i+1]!=' '){
output[j]=' ';
j++;
}
}
char [] m = new char [j];
int a=0;
for(int i=0; i<m.length; i++){
m[i]=output[a];
a++;
}
return new String (m);
}
.trim()
에서 잊었 System.out.println(a);
습니까?
한 가지 매우 중요한 점은 전적으로 "공백"으로 구성된 문자열이 빈 문자열을 반환한다는 것입니다.
경우 string sSomething = "xxxxx"
, 어디에 x
공백에 대한 서, sSomething.trim()
빈 문자열을 반환합니다.
경우 string sSomething = "xxAxx"
, 어디에 x
공백 방치 sSomething.trim()
돌아갑니다 A
.
경우 sSomething ="xxSomethingxxxxAndSomethingxElsexxx"
, sSomething.trim()
반환 SomethingxxxxAndSomethingxElse
통지의 수 있음을 x
단어 사이는 변경되지 않습니다.
trim()
이 게시물에 표시된 것처럼 깔끔한 패킷 문자열 을 정규식과 결합 하려면 Java를 사용하여 문자열에서 중복 공백을 제거하는 방법? .
순서는 결과에 의미가 없지만 trim()
먼저 더 효율적입니다. 도움이 되었기를 바랍니다.
String 용 Javadoc 에는 모든 세부 정보가 있습니다. 양쪽 끝에서 공백 (공백, 탭 등)을 제거하고 새 문자열을 반환합니다.
어떤 방법을 수행할지 확인하려면 BeanShell 을 사용할 수 있습니다 . 가능한 한 Java에 가깝도록 설계된 스크립팅 언어입니다. 일반적으로 말하면 약간의 완화가있는 Java로 해석됩니다. 이런 종류의 또 다른 옵션은 Groovy 언어입니다. 이 두 스크립팅 언어는 통역 언어에서 알고있는 편리한 Read-Eval-Print 루프를 제공합니다. 따라서 콘솔을 실행하고 다음을 입력 할 수 있습니다.
" content ".trim();
(또는 Groovy 콘솔)을 "content"
누르면 결과가 표시 됩니다 .Enter
Ctrl+R
String formattedStr=unformattedStr;
formattedStr=formattedStr.trim().replaceAll("\\s+", " ");
trim()
이미 어떤 수행 repkaceAll()
이 할 떠났다 것도이 있다면, 할 것입니다.