Data Type Java

/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
/**
 * 

Operations on boolean primitives and Boolean objects.


 *
 * 

This class tries to handle null input gracefully.
 * An exception will not be thrown for a null input.
 * Each method documents its behaviour in more detail.


 * 
 * @author Stephen Colebourne
 * @author Matthew Hawthorne
 * @author Gary Gregory
 * @since 2.0
 * @version $Id: BooleanUtils.java 589050 2007-10-27 05:07:45Z bayard $
 */
public class Main {
  /**
   * 

Converts a String to a boolean (optimised for performance).


   * 
   * 

'true''on' or 'yes'
   * (case insensitive) will return true. Otherwise,
   * false is returned.


   * 
   * 

This method performs 4 times faster (JDK1.4) than
   * Boolean.valueOf(String). However, this method accepts
   * 'on' and 'yes' as true values.
   *
   * 


   *   BooleanUtils.toBoolean(null)    = false
   *   BooleanUtils.toBoolean("true")  = true
   *   BooleanUtils.toBoolean("TRUE")  = true
   *   BooleanUtils.toBoolean("tRUe")  = true
   *   BooleanUtils.toBoolean("on")    = true
   *   BooleanUtils.toBoolean("yes")   = true
   *   BooleanUtils.toBoolean("false") = false
   *   BooleanUtils.toBoolean("x gti") = false
   * 

   *
   * @param str  the String to check
   * @return the boolean value of the string, false if no match
   */
  public static boolean toBoolean(String str) {
      // Previously used equalsIgnoreCase, which was fast for interned 'true'.
      // Non interned 'true' matched 15 times slower.
      // 
      // Optimisation provides same performance as before for interned 'true'.
      // Similar performance for null, 'false', and other strings not length 2/3/4.
      // 'true'/'TRUE' match 4 times slower, 'tRUE'/'True' 7 times slower.
      if (str == "true") {
          return true;
      }
      if (str == null) {
          return false;
      }
      switch (str.length()) {
          case 2: {
              char ch0 = str.charAt(0);
              char ch1 = str.charAt(1);
              return 
                  (ch0 == 'o' || ch0 == 'O') &&
                  (ch1 == 'n' || ch1 == 'N');
          }
          case 3: {
              char ch = str.charAt(0);
              if (ch == 'y') {
                  return 
                      (str.charAt(1) == 'e' || str.charAt(1) == 'E') &&
                      (str.charAt(2) == 's' || str.charAt(2) == 'S');
              }
              if (ch == 'Y') {
                  return 
                      (str.charAt(1) == 'E' || str.charAt(1) == 'e') &&
                      (str.charAt(2) == 'S' || str.charAt(2) == 's');
              }
              return false;
          }
          case 4: {
              char ch = str.charAt(0);
              if (ch == 't') {
                  return 
                      (str.charAt(1) == 'r' || str.charAt(1) == 'R') &&
                      (str.charAt(2) == 'u' || str.charAt(2) == 'U') &&
                      (str.charAt(3) == 'e' || str.charAt(3) == 'E');
              }
              if (ch == 'T') {
                  return 
                      (str.charAt(1) == 'R' || str.charAt(1) == 'r') &&
                      (str.charAt(2) == 'U' || str.charAt(2) == 'u') &&
                      (str.charAt(3) == 'E' || str.charAt(3) == 'e');
              }
          }
      }
      return false;
  }
}