|
1 /* |
|
2 ******************************************************************************* |
|
3 * |
|
4 * Copyright (C) 1999-2011, International Business Machines |
|
5 * Corporation and others. All Rights Reserved. |
|
6 * |
|
7 ******************************************************************************* |
|
8 * file name: unistr_props.cpp |
|
9 * encoding: US-ASCII |
|
10 * tab size: 8 (not used) |
|
11 * indentation:2 |
|
12 * |
|
13 * created on: 2004aug25 |
|
14 * created by: Markus W. Scherer |
|
15 * |
|
16 * Character property dependent functions moved here from unistr.cpp |
|
17 */ |
|
18 |
|
19 #include "unicode/utypes.h" |
|
20 #include "unicode/uchar.h" |
|
21 #include "unicode/unistr.h" |
|
22 #include "unicode/utf16.h" |
|
23 |
|
24 U_NAMESPACE_BEGIN |
|
25 |
|
26 UnicodeString& |
|
27 UnicodeString::trim() |
|
28 { |
|
29 if(isBogus()) { |
|
30 return *this; |
|
31 } |
|
32 |
|
33 UChar *array = getArrayStart(); |
|
34 UChar32 c; |
|
35 int32_t oldLength = this->length(); |
|
36 int32_t i = oldLength, length; |
|
37 |
|
38 // first cut off trailing white space |
|
39 for(;;) { |
|
40 length = i; |
|
41 if(i <= 0) { |
|
42 break; |
|
43 } |
|
44 U16_PREV(array, 0, i, c); |
|
45 if(!(c == 0x20 || u_isWhitespace(c))) { |
|
46 break; |
|
47 } |
|
48 } |
|
49 if(length < oldLength) { |
|
50 setLength(length); |
|
51 } |
|
52 |
|
53 // find leading white space |
|
54 int32_t start; |
|
55 i = 0; |
|
56 for(;;) { |
|
57 start = i; |
|
58 if(i >= length) { |
|
59 break; |
|
60 } |
|
61 U16_NEXT(array, i, length, c); |
|
62 if(!(c == 0x20 || u_isWhitespace(c))) { |
|
63 break; |
|
64 } |
|
65 } |
|
66 |
|
67 // move string forward over leading white space |
|
68 if(start > 0) { |
|
69 doReplace(0, start, 0, 0, 0); |
|
70 } |
|
71 |
|
72 return *this; |
|
73 } |
|
74 |
|
75 U_NAMESPACE_END |