• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2012 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.utils;
18 
19 import com.android.annotations.NonNull;
20 
21 public class SdkUtils {
22     /**
23      * Returns true if the given string ends with the given suffix, using a
24      * case-insensitive comparison.
25      *
26      * @param string the full string to be checked
27      * @param suffix the suffix to be checked for
28      * @return true if the string case-insensitively ends with the given suffix
29      */
endsWithIgnoreCase(String string, String suffix)30     public static boolean endsWithIgnoreCase(String string, String suffix) {
31         return string.regionMatches(true /* ignoreCase */, string.length() - suffix.length(),
32                 suffix, 0, suffix.length());
33     }
34 
35     /**
36      * Returns true if the given sequence ends with the given suffix (case
37      * sensitive).
38      *
39      * @param sequence the character sequence to be checked
40      * @param suffix the suffix to look for
41      * @return true if the given sequence ends with the given suffix
42      */
endsWith(CharSequence sequence, CharSequence suffix)43     public static boolean endsWith(CharSequence sequence, CharSequence suffix) {
44         return endsWith(sequence, sequence.length(), suffix);
45     }
46 
47     /**
48      * Returns true if the given sequence ends at the given offset with the given suffix (case
49      * sensitive)
50      *
51      * @param sequence the character sequence to be checked
52      * @param endOffset the offset at which the sequence is considered to end
53      * @param suffix the suffix to look for
54      * @return true if the given sequence ends with the given suffix
55      */
endsWith(CharSequence sequence, int endOffset, CharSequence suffix)56     public static boolean endsWith(CharSequence sequence, int endOffset, CharSequence suffix) {
57         if (endOffset < suffix.length()) {
58             return false;
59         }
60 
61         for (int i = endOffset - 1, j = suffix.length() - 1; j >= 0; i--, j--) {
62             if (sequence.charAt(i) != suffix.charAt(j)) {
63                 return false;
64             }
65         }
66 
67         return true;
68     }
69 
70     /**
71      * Returns true if the given string starts with the given prefix, using a
72      * case-insensitive comparison.
73      *
74      * @param string the full string to be checked
75      * @param prefix the prefix to be checked for
76      * @return true if the string case-insensitively starts with the given prefix
77      */
startsWithIgnoreCase(String string, String prefix)78     public static boolean startsWithIgnoreCase(String string, String prefix) {
79         return string.regionMatches(true /* ignoreCase */, 0, prefix, 0, prefix.length());
80     }
81 
82     /**
83      * Returns true if the given string starts at the given offset with the
84      * given prefix, case insensitively.
85      *
86      * @param string the full string to be checked
87      * @param offset the offset in the string to start looking
88      * @param prefix the prefix to be checked for
89      * @return true if the string case-insensitively starts at the given offset
90      *         with the given prefix
91      */
startsWith(String string, int offset, String prefix)92     public static boolean startsWith(String string, int offset, String prefix) {
93         return string.regionMatches(true /* ignoreCase */, offset, prefix, 0, prefix.length());
94     }
95 
96     /**
97      * Strips the whitespace from the given string
98      *
99      * @param string the string to be cleaned up
100      * @return the string, without whitespace
101      */
stripWhitespace(String string)102     public static String stripWhitespace(String string) {
103         StringBuilder sb = new StringBuilder(string.length());
104         for (int i = 0, n = string.length(); i < n; i++) {
105             char c = string.charAt(i);
106             if (!Character.isWhitespace(c)) {
107                 sb.append(c);
108             }
109         }
110 
111         return sb.toString();
112     }
113 
114     /** For use by {@link #getLineSeparator()} */
115     private static String sLineSeparator;
116 
117     /**
118      * Returns the default line separator to use.
119      * <p>
120      * NOTE: If you have an associated {@link IDocument}, it is better to call
121      * {@link TextUtilities#getDefaultLineDelimiter(IDocument)} since that will
122      * allow (for example) editing a \r\n-delimited document on a \n-delimited
123      * platform and keep a consistent usage of delimiters in the file.
124      *
125      * @return the delimiter string to use
126      */
127     @NonNull
getLineSeparator()128     public static String getLineSeparator() {
129         if (sLineSeparator == null) {
130             // This is guaranteed to exist:
131             sLineSeparator = System.getProperty("line.separator"); //$NON-NLS-1$
132         }
133 
134         return sLineSeparator;
135     }
136 }
137