Yet Another WebIOPi+
 All Classes Namespaces Files Functions Variables Macros Pages
StringUtils.java
Go to the documentation of this file.
1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one or more
3  * contributor license agreements. See the NOTICE file distributed with
4  * this work for additional information regarding copyright ownership.
5  * The ASF licenses this file to You under the Apache License, Version 2.0
6  * (the "License"); you may not use this file except in compliance with
7  * the License. You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 
18 package org.apache.commons.codec.binary;
19 
20 import java.io.UnsupportedEncodingException;
21 import java.nio.charset.Charset;
22 
25 
26 /**
27  * Converts String to and from bytes using the encodings required by the Java specification. These encodings are
28  * specified in <a href="http://download.oracle.com/javase/6/docs/api/java/nio/charset/Charset.html">
29  * Standard charsets</a>.
30  *
31  * <p>This class is immutable and thread-safe.</p>
32  *
33  * @see CharEncoding
34  * @see <a href="http://download.oracle.com/javase/6/docs/api/java/nio/charset/Charset.html">Standard charsets</a>
35  * @version $Id$
36  * @since 1.4
37  */
38 public class StringUtils {
39 
40  /**
41  * Calls {@link String#getBytes(Charset)}
42  *
43  * @param string
44  * The string to encode (if null, return null).
45  * @param charset
46  * The {@link Charset} to encode the {@code String}
47  * @return the encoded bytes
48  */
49  private static byte[] getBytes(final String string, final Charset charset) {
50  if (string == null) {
51  return null;
52  }
53  return string.getBytes(charset);
54  }
55 
56  /**
57  * Encodes the given string into a sequence of bytes using the ISO-8859-1 charset, storing the result into a new
58  * byte array.
59  *
60  * @param string
61  * the String to encode, may be {@code null}
62  * @return encoded bytes, or {@code null} if the input string was {@code null}
63  * @throws NullPointerException
64  * Thrown if {@link Charsets#ISO_8859_1} is not initialized, which should never happen since it is
65  * required by the Java platform specification.
66  * @since As of 1.7, throws {@link NullPointerException} instead of UnsupportedEncodingException
67  * @see <a href="http://download.oracle.com/javase/6/docs/api/java/nio/charset/Charset.html">Standard charsets</a>
68  * @see #getBytesUnchecked(String, String)
69  */
70  public static byte[] getBytesIso8859_1(final String string) {
71  return getBytes(string, Charsets.ISO_8859_1);
72  }
73 
74 
75  /**
76  * Encodes the given string into a sequence of bytes using the named charset, storing the result into a new byte
77  * array.
78  * <p>
79  * This method catches {@link UnsupportedEncodingException} and rethrows it as {@link IllegalStateException}, which
80  * should never happen for a required charset name. Use this method when the encoding is required to be in the JRE.
81  * </p>
82  *
83  * @param string
84  * the String to encode, may be {@code null}
85  * @param charsetName
86  * The name of a required {@link java.nio.charset.Charset}
87  * @return encoded bytes, or {@code null} if the input string was {@code null}
88  * @throws IllegalStateException
89  * Thrown when a {@link UnsupportedEncodingException} is caught, which should never happen for a
90  * required charset name.
91  * @see CharEncoding
92  * @see String#getBytes(String)
93  */
94  public static byte[] getBytesUnchecked(final String string, final String charsetName) {
95  if (string == null) {
96  return null;
97  }
98  try {
99  return string.getBytes(charsetName);
100  } catch (final UnsupportedEncodingException e) {
101  throw StringUtils.newIllegalStateException(charsetName, e);
102  }
103  }
104 
105  /**
106  * Encodes the given string into a sequence of bytes using the US-ASCII charset, storing the result into a new byte
107  * array.
108  *
109  * @param string
110  * the String to encode, may be {@code null}
111  * @return encoded bytes, or {@code null} if the input string was {@code null}
112  * @throws NullPointerException
113  * Thrown if {@link Charsets#US_ASCII} is not initialized, which should never happen since it is
114  * required by the Java platform specification.
115  * @since As of 1.7, throws {@link NullPointerException} instead of UnsupportedEncodingException
116  * @see <a href="http://download.oracle.com/javase/6/docs/api/java/nio/charset/Charset.html">Standard charsets</a>
117  * @see #getBytesUnchecked(String, String)
118  */
119  public static byte[] getBytesUsAscii(final String string) {
120  return getBytes(string, Charsets.US_ASCII);
121  }
122 
123  /**
124  * Encodes the given string into a sequence of bytes using the UTF-16 charset, storing the result into a new byte
125  * array.
126  *
127  * @param string
128  * the String to encode, may be {@code null}
129  * @return encoded bytes, or {@code null} if the input string was {@code null}
130  * @throws NullPointerException
131  * Thrown if {@link Charsets#UTF_16} is not initialized, which should never happen since it is
132  * required by the Java platform specification.
133  * @since As of 1.7, throws {@link NullPointerException} instead of UnsupportedEncodingException
134  * @see <a href="http://download.oracle.com/javase/6/docs/api/java/nio/charset/Charset.html">Standard charsets</a>
135  * @see #getBytesUnchecked(String, String)
136  */
137  public static byte[] getBytesUtf16(final String string) {
138  return getBytes(string, Charsets.UTF_16);
139  }
140 
141  /**
142  * Encodes the given string into a sequence of bytes using the UTF-16BE charset, storing the result into a new byte
143  * array.
144  *
145  * @param string
146  * the String to encode, may be {@code null}
147  * @return encoded bytes, or {@code null} if the input string was {@code null}
148  * @throws NullPointerException
149  * Thrown if {@link Charsets#UTF_16BE} is not initialized, which should never happen since it is
150  * required by the Java platform specification.
151  * @since As of 1.7, throws {@link NullPointerException} instead of UnsupportedEncodingException
152  * @see <a href="http://download.oracle.com/javase/6/docs/api/java/nio/charset/Charset.html">Standard charsets</a>
153  * @see #getBytesUnchecked(String, String)
154  */
155  public static byte[] getBytesUtf16Be(final String string) {
156  return getBytes(string, Charsets.UTF_16BE);
157  }
158 
159  /**
160  * Encodes the given string into a sequence of bytes using the UTF-16LE charset, storing the result into a new byte
161  * array.
162  *
163  * @param string
164  * the String to encode, may be {@code null}
165  * @return encoded bytes, or {@code null} if the input string was {@code null}
166  * @throws NullPointerException
167  * Thrown if {@link Charsets#UTF_16LE} is not initialized, which should never happen since it is
168  * required by the Java platform specification.
169  * @since As of 1.7, throws {@link NullPointerException} instead of UnsupportedEncodingException
170  * @see <a href="http://download.oracle.com/javase/6/docs/api/java/nio/charset/Charset.html">Standard charsets</a>
171  * @see #getBytesUnchecked(String, String)
172  */
173  public static byte[] getBytesUtf16Le(final String string) {
174  return getBytes(string, Charsets.UTF_16LE);
175  }
176 
177  /**
178  * Encodes the given string into a sequence of bytes using the UTF-8 charset, storing the result into a new byte
179  * array.
180  *
181  * @param string
182  * the String to encode, may be {@code null}
183  * @return encoded bytes, or {@code null} if the input string was {@code null}
184  * @throws NullPointerException
185  * Thrown if {@link Charsets#UTF_8} is not initialized, which should never happen since it is
186  * required by the Java platform specification.
187  * @since As of 1.7, throws {@link NullPointerException} instead of UnsupportedEncodingException
188  * @see <a href="http://download.oracle.com/javase/6/docs/api/java/nio/charset/Charset.html">Standard charsets</a>
189  * @see #getBytesUnchecked(String, String)
190  */
191  public static byte[] getBytesUtf8(final String string) {
192  return getBytes(string, Charsets.UTF_8);
193  }
194 
195  private static IllegalStateException newIllegalStateException(final String charsetName,
196  final UnsupportedEncodingException e) {
197  return new IllegalStateException(charsetName + ": " + e);
198  }
199 
200  /**
201  * Constructs a new <code>String</code> by decoding the specified array of bytes using the given charset.
202  *
203  * @param bytes
204  * The bytes to be decoded into characters
205  * @param charset
206  * The {@link Charset} to encode the {@code String}
207  * @return A new <code>String</code> decoded from the specified array of bytes using the given charset,
208  * or {@code null} if the input byte array was {@code null}.
209  * @throws NullPointerException
210  * Thrown if {@link Charsets#UTF_8} is not initialized, which should never happen since it is
211  * required by the Java platform specification.
212  */
213  private static String newString(final byte[] bytes, final Charset charset) {
214  return bytes == null ? null : new String(bytes, charset);
215  }
216 
217  /**
218  * Constructs a new <code>String</code> by decoding the specified array of bytes using the given charset.
219  * <p>
220  * This method catches {@link UnsupportedEncodingException} and re-throws it as {@link IllegalStateException}, which
221  * should never happen for a required charset name. Use this method when the encoding is required to be in the JRE.
222  * </p>
223  *
224  * @param bytes
225  * The bytes to be decoded into characters, may be {@code null}
226  * @param charsetName
227  * The name of a required {@link java.nio.charset.Charset}
228  * @return A new <code>String</code> decoded from the specified array of bytes using the given charset,
229  * or {@code null} if the input byte array was {@code null}.
230  * @throws IllegalStateException
231  * Thrown when a {@link UnsupportedEncodingException} is caught, which should never happen for a
232  * required charset name.
233  * @see CharEncoding
234  * @see String#String(byte[], String)
235  */
236  public static String newString(final byte[] bytes, final String charsetName) {
237  if (bytes == null) {
238  return null;
239  }
240  try {
241  return new String(bytes, charsetName);
242  } catch (final UnsupportedEncodingException e) {
243  throw StringUtils.newIllegalStateException(charsetName, e);
244  }
245  }
246 
247  /**
248  * Constructs a new <code>String</code> by decoding the specified array of bytes using the ISO-8859-1 charset.
249  *
250  * @param bytes
251  * The bytes to be decoded into characters, may be {@code null}
252  * @return A new <code>String</code> decoded from the specified array of bytes using the ISO-8859-1 charset, or
253  * {@code null} if the input byte array was {@code null}.
254  * @throws NullPointerException
255  * Thrown if {@link Charsets#ISO_8859_1} is not initialized, which should never happen since it is
256  * required by the Java platform specification.
257  * @since As of 1.7, throws {@link NullPointerException} instead of UnsupportedEncodingException
258  */
259  public static String newStringIso8859_1(final byte[] bytes) {
260  return new String(bytes, Charsets.ISO_8859_1);
261  }
262 
263  /**
264  * Constructs a new <code>String</code> by decoding the specified array of bytes using the US-ASCII charset.
265  *
266  * @param bytes
267  * The bytes to be decoded into characters
268  * @return A new <code>String</code> decoded from the specified array of bytes using the US-ASCII charset,
269  * or {@code null} if the input byte array was {@code null}.
270  * @throws NullPointerException
271  * Thrown if {@link Charsets#US_ASCII} is not initialized, which should never happen since it is
272  * required by the Java platform specification.
273  * @since As of 1.7, throws {@link NullPointerException} instead of UnsupportedEncodingException
274  */
275  public static String newStringUsAscii(final byte[] bytes) {
276  return new String(bytes, Charsets.US_ASCII);
277  }
278 
279  /**
280  * Constructs a new <code>String</code> by decoding the specified array of bytes using the UTF-16 charset.
281  *
282  * @param bytes
283  * The bytes to be decoded into characters
284  * @return A new <code>String</code> decoded from the specified array of bytes using the UTF-16 charset
285  * or {@code null} if the input byte array was {@code null}.
286  * @throws NullPointerException
287  * Thrown if {@link Charsets#UTF_16} is not initialized, which should never happen since it is
288  * required by the Java platform specification.
289  * @since As of 1.7, throws {@link NullPointerException} instead of UnsupportedEncodingException
290  */
291  public static String newStringUtf16(final byte[] bytes) {
292  return new String(bytes, Charsets.UTF_16);
293  }
294 
295  /**
296  * Constructs a new <code>String</code> by decoding the specified array of bytes using the UTF-16BE charset.
297  *
298  * @param bytes
299  * The bytes to be decoded into characters
300  * @return A new <code>String</code> decoded from the specified array of bytes using the UTF-16BE charset,
301  * or {@code null} if the input byte array was {@code null}.
302  * @throws NullPointerException
303  * Thrown if {@link Charsets#UTF_16BE} is not initialized, which should never happen since it is
304  * required by the Java platform specification.
305  * @since As of 1.7, throws {@link NullPointerException} instead of UnsupportedEncodingException
306  */
307  public static String newStringUtf16Be(final byte[] bytes) {
308  return new String(bytes, Charsets.UTF_16BE);
309  }
310 
311  /**
312  * Constructs a new <code>String</code> by decoding the specified array of bytes using the UTF-16LE charset.
313  *
314  * @param bytes
315  * The bytes to be decoded into characters
316  * @return A new <code>String</code> decoded from the specified array of bytes using the UTF-16LE charset,
317  * or {@code null} if the input byte array was {@code null}.
318  * @throws NullPointerException
319  * Thrown if {@link Charsets#UTF_16LE} is not initialized, which should never happen since it is
320  * required by the Java platform specification.
321  * @since As of 1.7, throws {@link NullPointerException} instead of UnsupportedEncodingException
322  */
323  public static String newStringUtf16Le(final byte[] bytes) {
324  return new String(bytes, Charsets.UTF_16LE);
325  }
326 
327  /**
328  * Constructs a new <code>String</code> by decoding the specified array of bytes using the UTF-8 charset.
329  *
330  * @param bytes
331  * The bytes to be decoded into characters
332  * @return A new <code>String</code> decoded from the specified array of bytes using the UTF-8 charset,
333  * or {@code null} if the input byte array was {@code null}.
334  * @throws NullPointerException
335  * Thrown if {@link Charsets#UTF_8} is not initialized, which should never happen since it is
336  * required by the Java platform specification.
337  * @since As of 1.7, throws {@link NullPointerException} instead of UnsupportedEncodingException
338  */
339  public static String newStringUtf8(final byte[] bytes) {
340  return newString(bytes, Charsets.UTF_8);
341  }
342 
343 }
static String newStringUtf16Le(final byte[] bytes)
static final Charset US_ASCII
Definition: Charsets.java:106
static byte[] getBytesUtf16Le(final String string)
static byte[] getBytesIso8859_1(final String string)
static String newStringIso8859_1(final byte[] bytes)
static String newStringUtf16(final byte[] bytes)
static IllegalStateException newIllegalStateException(final String charsetName, final UnsupportedEncodingException e)
static String newString(final byte[] bytes, final Charset charset)
static String newString(final byte[] bytes, final String charsetName)
static byte[] getBytesUsAscii(final String string)
static byte[] getBytesUnchecked(final String string, final String charsetName)
static byte[] getBytesUtf16(final String string)
static String newStringUtf16Be(final byte[] bytes)
static String newStringUtf8(final byte[] bytes)
static final Charset UTF_16BE
Definition: Charsets.java:125
static byte[] getBytesUtf8(final String string)
static final Charset UTF_8
Definition: Charsets.java:143
static byte[] getBytesUtf16Be(final String string)
static String newStringUsAscii(final byte[] bytes)
static final Charset UTF_16LE
Definition: Charsets.java:134
static final Charset ISO_8859_1
Definition: Charsets.java:97
static final Charset UTF_16
Definition: Charsets.java:116
static byte[] getBytes(final String string, final Charset charset)