1a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard/*
2a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard * Copyright (C) 2013 The Android Open Source Project
3a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard *
4a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard * Licensed under the Apache License, Version 2.0 (the "License");
5a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard * you may not use this file except in compliance with the License.
6a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard * You may obtain a copy of the License at
7a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard *
8a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard *      http://www.apache.org/licenses/LICENSE-2.0
9a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard *
10a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard * Unless required by applicable law or agreed to in writing, software
11a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard * distributed under the License is distributed on an "AS IS" BASIS,
12a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard * See the License for the specific language governing permissions and
14a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard * limitations under the License.
15a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard */
16a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard
17a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalardpackage android.text;
18a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard
19a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalardpublic class TextUtils {
20a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard    private TextUtils() { /* cannot be instantiated */ }
21a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard
22a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard    /**
23a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard     * Returns true if the string is null or 0-length.
24a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard     * @param str the string to be examined
25a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard     * @return true if str is null or zero length
26a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard     */
27a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard    public static boolean isEmpty(CharSequence str) {
28a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard        if (str == null || str.length() == 0)
29a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard            return true;
30a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard        else
31a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard            return false;
32a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard    }
33a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard
34a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard    /**
35a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard     * Returns true if a and b are equal, including if they are both null.
36a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard     * <p><i>Note: In platform versions 1.1 and earlier, this method only worked well if
37a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard     * both the arguments were instances of String.</i></p>
38a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard     * @param a first CharSequence to check
39a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard     * @param b second CharSequence to check
40a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard     * @return true if a and b are equal
41a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard     */
42a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard    public static boolean equals(CharSequence a, CharSequence b) {
43a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard        if (a == b) return true;
44a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard        int length;
45a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard        if (a != null && b != null && (length = a.length()) == b.length()) {
46a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard            if (a instanceof String && b instanceof String) {
47a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard                return a.equals(b);
48a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard            } else {
49a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard                for (int i = 0; i < length; i++) {
50a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard                    if (a.charAt(i) != b.charAt(i)) return false;
51a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard                }
52a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard                return true;
53a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard            }
54a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard        }
55a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard        return false;
56a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard    }
57a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard
58a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard    /**
59a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard     * Returns list of multiple {@link CharSequence} joined into a single
60a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard     * {@link CharSequence} separated by localized delimiter such as ", ".
61a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard     *
62a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard     * @hide
63a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard     */
64a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard    public static CharSequence join(Iterable<CharSequence> list) {
65a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard        final CharSequence delimiter = ", ";
66a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard        return join(delimiter, list);
67a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard    }
68a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard
69a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard    /**
70a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard     * Returns a string containing the tokens joined by delimiters.
71a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard     * @param tokens an array objects to be joined. Strings will be formed from
72a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard     *     the objects by calling object.toString().
73a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard     */
74a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard    public static String join(CharSequence delimiter, Object[] tokens) {
75a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard        StringBuilder sb = new StringBuilder();
76a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard        boolean firstTime = true;
77a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard        for (Object token: tokens) {
78a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard            if (firstTime) {
79a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard                firstTime = false;
80a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard            } else {
81a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard                sb.append(delimiter);
82a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard            }
83a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard            sb.append(token);
84a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard        }
85a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard        return sb.toString();
86a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard    }
87a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard
88a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard    /**
89a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard     * Returns a string containing the tokens joined by delimiters.
90a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard     * @param tokens an array objects to be joined. Strings will be formed from
91a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard     *     the objects by calling object.toString().
92a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard     */
93a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard    public static String join(CharSequence delimiter, Iterable tokens) {
94a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard        StringBuilder sb = new StringBuilder();
95a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard        boolean firstTime = true;
96a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard        for (Object token: tokens) {
97a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard            if (firstTime) {
98a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard                firstTime = false;
99a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard            } else {
100a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard                sb.append(delimiter);
101a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard            }
102a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard            sb.append(token);
103a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard        }
104a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard        return sb.toString();
105a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard    }
106a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard
107a245d15da5d295af21ead9a01583c64796a31ad7Jean Chalard}
108