11d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/*
21d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Copyright (C) 2010 The Guava Authors
31d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert *
41d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Licensed under the Apache License, Version 2.0 (the "License");
51d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * you may not use this file except in compliance with the License.
61d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * You may obtain a copy of the License at
71d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert *
81d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * http://www.apache.org/licenses/LICENSE-2.0
91d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert *
101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Unless required by applicable law or agreed to in writing, software
111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * distributed under the License is distributed on an "AS IS" BASIS,
121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * See the License for the specific language governing permissions and
141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * limitations under the License.
151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */
161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpackage com.google.common.base;
181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.Beta;
201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtCompatible;
211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/**
231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Static methods pertaining to ASCII characters (those in the range of values
241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * {@code 0x00} through {@code 0x7F}), and to strings containing such
251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * characters.
261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert *
271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * <p>ASCII utilities also exist in other classes of this package:
281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * <ul>
291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * <!-- TODO(kevinb): how can we make this not produce a warning when building gwt javadoc? -->
301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * <li>{@link Charsets#US_ASCII} specifies the {@code Charset} of ASCII characters.
311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * <li>{@link CharMatcher#ASCII} matches ASCII characters and provides text processing methods
321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert *     which operate only on the ASCII characters of a string.
331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * </ul>
341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert *
351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Craig Berry
361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Gregory Kick
371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @since 7.0
381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */
391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert@GwtCompatible
401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic final class Ascii {
411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  private Ascii() {}
431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /* The ASCII control characters, per RFC 20. */
451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * Null ('\0'): The all-zeros character which may serve to accomplish
471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * time fill and media fill.  Normally used as a C string terminator.
481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * <p>Although RFC 20 names this as "Null", note that it is distinct
491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * from the C/C++ "NULL" pointer.
501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   *
511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * @since 8.0
521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static final byte NUL = 0;
541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * Start of Heading: A communication control character used at
571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * the beginning of a sequence of characters which constitute a
581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * machine-sensible address or routing information.  Such a sequence is
591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * referred to as the "heading."  An STX character has the effect of
601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * terminating a heading.
611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   *
621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * @since 8.0
631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static final byte SOH = 1;
651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * Start of Text: A communication control character which
681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * precedes a sequence of characters that is to be treated as an entity
691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * and entirely transmitted through to the ultimate destination.  Such a
701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * sequence is referred to as "text."  STX may be used to terminate a
711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * sequence of characters started by SOH.
721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   *
731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * @since 8.0
741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static final byte STX = 2;
761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * End of Text: A communication control character used to
791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * terminate a sequence of characters started with STX and transmitted
801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * as an entity.
811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   *
821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * @since 8.0
831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static final byte ETX = 3;
851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * End of Transmission: A communication control character used
881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * to indicate the conclusion of a transmission, which may have
891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * contained one or more texts and any associated headings.
901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   *
911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * @since 8.0
921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static final byte EOT = 4;
941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * Enquiry: A communication control character used in data
971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * communication systems as a request for a response from a remote
981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * station.  It may be used as a "Who Are You" (WRU) to obtain
991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * identification, or may be used to obtain station status, or both.
1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   *
1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * @since 8.0
1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static final byte ENQ = 5;
1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * Acknowledge: A communication control character transmitted
1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * by a receiver as an affirmative response to a sender.
1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   *
1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * @since 8.0
1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static final byte ACK = 6;
1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * Bell ('\a'): A character for use when there is a need to call for
1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * human attention.  It may control alarm or attention devices.
1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   *
1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * @since 8.0
1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static final byte BEL = 7;
1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
1221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * Backspace ('\b'): A format effector which controls the movement of
1231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * the printing position one printing space backward on the same
1241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * printing line.  (Applicable also to display devices.)
1251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   *
1261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * @since 8.0
1271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static final byte BS = 8;
1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
1311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * Horizontal Tabulation ('\t'): A format effector which controls the
1321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * movement of the printing position to the next in a series of
1331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * predetermined positions along the printing line.  (Applicable also to
1341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * display devices and the skip function on punched cards.)
1351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   *
1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * @since 8.0
1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static final byte HT = 9;
1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * Line Feed ('\n'): A format effector which controls the movement of
1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * the printing position to the next printing line.  (Applicable also to
1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * display devices.) Where appropriate, this character may have the
1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * meaning "New Line" (NL), a format effector which controls the
1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * movement of the printing point to the first printing position on the
1461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * next printing line.  Use of this convention requires agreement
1471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * between sender and recipient of data.
1481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   *
1491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * @since 8.0
1501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
1511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static final byte LF = 10;
1521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
1541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * Alternate name for {@link #LF}.  ({@code LF} is preferred.)
1551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   *
1561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * @since 8.0
1571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
1581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static final byte NL = 10;
1591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
1611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * Vertical Tabulation ('\v'): A format effector which controls the
1621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * movement of the printing position to the next in a series of
1631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * predetermined printing lines.  (Applicable also to display devices.)
1641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   *
1651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * @since 8.0
1661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
1671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static final byte VT = 11;
1681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
1701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * Form Feed ('\f'): A format effector which controls the movement of
1711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * the printing position to the first pre-determined printing line on
1721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * the next form or page.  (Applicable also to display devices.)
1731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   *
1741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * @since 8.0
1751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
1761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static final byte FF = 12;
1771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
1791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * Carriage Return ('\r'): A format effector which controls the
1801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * movement of the printing position to the first printing position on
1811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * the same printing line.  (Applicable also to display devices.)
1821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   *
1831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * @since 8.0
1841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
1851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static final byte CR = 13;
1861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
1881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * Shift Out: A control character indicating that the code
1891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * combinations which follow shall be interpreted as outside of the
1901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * character set of the standard code table until a Shift In character
1911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * is reached.
1921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   *
1931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * @since 8.0
1941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
1951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static final byte SO = 14;
1961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
1981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * Shift In: A control character indicating that the code
1991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * combinations which follow shall be interpreted according to the
2001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * standard code table.
2011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   *
2021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * @since 8.0
2031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
2041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static final byte SI = 15;
2051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
2071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * Data Link Escape: A communication control character which
2081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * will change the meaning of a limited number of contiguously following
2091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * characters.  It is used exclusively to provide supplementary controls
2101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * in data communication networks.
2111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   *
2121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * @since 8.0
2131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
2141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static final byte DLE = 16;
2151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
2171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * Device Controls: Characters for the control
2181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * of ancillary devices associated with data processing or
2191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * telecommunication systems, more especially switching devices "on" or
2201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * "off."  (If a single "stop" control is required to interrupt or turn
2211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * off ancillary devices, DC4 is the preferred assignment.)
2221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   *
2231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * @since 8.0
2241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
2251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static final byte DC1 = 17; // aka XON
2261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
2281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * Transmission on/off: Although originally defined as DC1, this ASCII
2291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * control character is now better known as the XON code used for software
2301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * flow control in serial communications.  The main use is restarting
2311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * the transmission after the communication has been stopped by the XOFF
2321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * control code.
2331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   *
2341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * @since 8.0
2351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
2361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static final byte XON = 17; // aka DC1
2371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
2391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * @see #DC1
2401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   *
2411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * @since 8.0
2421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
2431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static final byte DC2 = 18;
2441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
2461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * @see #DC1
2471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   *
2481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * @since 8.0
2491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
2501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static final byte DC3 = 19; // aka XOFF
2511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
2531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * Transmission off. @see #XON
2541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   *
2551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * @since 8.0
2561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
2571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static final byte XOFF = 19; // aka DC3
2581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
2601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * @see #DC1
2611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   *
2621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * @since 8.0
2631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
2641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static final byte DC4 = 20;
2651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
2671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * Negative Acknowledge: A communication control character
2681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * transmitted by a receiver as a negative response to the sender.
2691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   *
2701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * @since 8.0
2711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
2721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static final byte NAK = 21;
2731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
2751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * Synchronous Idle: A communication control character used by
2761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * a synchronous transmission system in the absence of any other
2771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * character to provide a signal from which synchronism may be achieved
2781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * or retained.
2791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   *
2801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * @since 8.0
2811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
2821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static final byte SYN = 22;
2831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
2851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * End of Transmission Block: A communication control character
2861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * used to indicate the end of a block of data for communication
2871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * purposes.  ETB is used for blocking data where the block structure is
2881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * not necessarily related to the processing format.
2891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   *
2901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * @since 8.0
2911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
2921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static final byte ETB = 23;
2931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
2951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * Cancel: A control character used to indicate that the data
2961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * with which it is sent is in error or is to be disregarded.
2971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   *
2981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * @since 8.0
2991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
3001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static final byte CAN = 24;
3011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
3031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * End of Medium: A control character associated with the sent
3041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * data which may be used to identify the physical end of the medium, or
3051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * the end of the used, or wanted, portion of information recorded on a
3061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * medium.  (The position of this character does not necessarily
3071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * correspond to the physical end of the medium.)
3081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   *
3091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * @since 8.0
3101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
3111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static final byte EM = 25;
3121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
3141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * Substitute: A character that may be substituted for a
3151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * character which is determined to be invalid or in error.
3161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   *
3171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * @since 8.0
3181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
3191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static final byte SUB = 26;
3201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
3221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * Escape: A control character intended to provide code
3231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * extension (supplementary characters) in general information
3241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * interchange.  The Escape character itself is a prefix affecting the
3251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * interpretation of a limited number of contiguously following
3261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * characters.
3271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   *
3281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * @since 8.0
3291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
3301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static final byte ESC = 27;
3311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
3331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * File/Group/Record/Unit Separator: These information separators may be
3341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * used within data in optional fashion, except that their hierarchical
3351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * relationship shall be: FS is the most inclusive, then GS, then RS,
3361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * and US is least inclusive.  (The content and length of a File, Group,
3371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * Record, or Unit are not specified.)
3381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   *
3391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * @since 8.0
3401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
3411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static final byte FS = 28;
3421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
3441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * @see #FS
3451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   *
3461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * @since 8.0
3471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
3481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static final byte GS = 29;
3491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
3511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * @see #FS
3521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   *
3531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * @since 8.0
3541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
3551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static final byte RS = 30;
3561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
3581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * @see #FS
3591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   *
3601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * @since 8.0
3611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
3621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static final byte US = 31;
3631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
3651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * Space: A normally non-printing graphic character used to
3661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * separate words.  It is also a format effector which controls the
3671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * movement of the printing position, one printing position forward.
3681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * (Applicable also to display devices.)
3691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   *
3701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * @since 8.0
3711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
3721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static final byte SP = 32;
3731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
3751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * Alternate name for {@link #SP}.
3761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   *
3771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * @since 8.0
3781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
3791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static final byte SPACE = 32;
3801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
3821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * Delete: This character is used primarily to "erase" or
3831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * "obliterate" erroneous or unwanted characters in perforated tape.
3841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   *
3851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * @since 8.0
3861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
3871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static final byte DEL = 127;
3881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
3901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * The minimum value of an ASCII character.
3911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   *
3921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * @since 9.0
3931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
3941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @Beta
3951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static final int MIN = 0;
3961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
3971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
3981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * The maximum value of an ASCII character.
3991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   *
4001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * @since 9.0
4011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
4021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @Beta
4031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static final int MAX = 127;
4041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
4051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
4061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * Returns a copy of the input string in which all {@linkplain #isUpperCase(char) uppercase ASCII
4071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * characters} have been converted to lowercase. All other characters are copied without
4081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * modification.
4091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
4101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static String toLowerCase(String string) {
4111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    int length = string.length();
4121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    StringBuilder builder = new StringBuilder(length);
4131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    for (int i = 0; i < length; i++) {
4141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      builder.append(toLowerCase(string.charAt(i)));
4151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
4161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return builder.toString();
4171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
4181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
4191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
4201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * If the argument is an {@linkplain #isUpperCase(char) uppercase ASCII character} returns the
4211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * lowercase equivalent. Otherwise returns the argument.
4221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
4231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static char toLowerCase(char c) {
4241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return isUpperCase(c) ? (char) (c ^ 0x20) : c;
4251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
4261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
4271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
4281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * Returns a copy of the input string in which all {@linkplain #isLowerCase(char) lowercase ASCII
4291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * characters} have been converted to uppercase. All other characters are copied without
4301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * modification.
4311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
4321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static String toUpperCase(String string) {
4331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    int length = string.length();
4341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    StringBuilder builder = new StringBuilder(length);
4351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    for (int i = 0; i < length; i++) {
4361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      builder.append(toUpperCase(string.charAt(i)));
4371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
4381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return builder.toString();
4391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
4401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
4411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
4421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * If the argument is a {@linkplain #isLowerCase(char) lowercase ASCII character} returns the
4431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * uppercase equivalent. Otherwise returns the argument.
4441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
4451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static char toUpperCase(char c) {
4461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return isLowerCase(c) ? (char) (c & 0x5f) : c;
4471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
4481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
4491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
4501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * Indicates whether {@code c} is one of the twenty-six lowercase ASCII alphabetic characters
4511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * between {@code 'a'} and {@code 'z'} inclusive. All others (including non-ASCII characters)
4521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * return {@code false}.
4531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
4541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static boolean isLowerCase(char c) {
4551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return (c >= 'a') && (c <= 'z');
4561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
4571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
4581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /**
4591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * Indicates whether {@code c} is one of the twenty-six uppercase ASCII alphabetic characters
4601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * between {@code 'A'} and {@code 'Z'} inclusive. All others (including non-ASCII characters)
4611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   * return {@code false}.
4621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert   */
4631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public static boolean isUpperCase(char c) {
4641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return (c >= 'A') && (c <= 'Z');
4651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
4661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert}
467