code: public static Locale deriveLocale(String str)
      {
          if (str == null)
          {
              return null;
          }
          int len = str.length();
          if (len != 2 && len != 5 && len < 7)
          {
              return null;
          }
          char ch0 = str.charAt(0);
          char ch1 = str.charAt(1);
          if (ch0 < 'a' || ch0 > 'z' || ch1 < 'a' || ch1 > 'z')
          {
              return null;
          }
          if (len == 2)
          {
              return new Locale(str, "");
          }
          else
          {
              if (str.charAt(2) != '_')
              {
                  return null;
              }
              char ch3 = str.charAt(3);
              if (ch3 == '_')
              {
                  return new Locale(str.substring(0, 2), "", str.substring(4));
              }
              char ch4 = str.charAt(4);
              if (ch3 < 'A' || ch3 > 'Z' || ch4 < 'A' || ch4 > 'Z')
              {
                  return null;
              }
              if (len == 5)
              {
                  return new Locale(str.substring(0, 2), str.substring(3, 5));
              }
              else
              {
                  if (str.charAt(5) != '_')
                  {
                      return null;
                  }
                  return new Locale(str.substring(0, 2), str.substring(3, 5), str.substring(6));
              }
          }
      }
docs: Same as toLocale(), but return null when it cannot derive a valid Locale object.
  
  @param str
  @return