public static TableName valueOf(String name) {
    for (TableName tn : tableCache) {
      if (name.equals(tn.getNameAsString())) {
        return tn;
      }
    }

    final int namespaceDelimIndex = name.indexOf(NAMESPACE_DELIM);

    if (namespaceDelimIndex < 0) {
      return createTableNameIfNecessary(ByteBuffer.wrap(NamespaceDescriptor.DEFAULT_NAMESPACE_NAME),
        ByteBuffer.wrap(Bytes.toBytes(name)));
    } else {
      // indexOf is by character, not byte (consider multi-byte characters)
      String ns = name.substring(0, namespaceDelimIndex);
      String qualifier = name.substring(namespaceDelimIndex + 1);
      return createTableNameIfNecessary(ByteBuffer.wrap(Bytes.toBytes(ns)),
        ByteBuffer.wrap(Bytes.toBytes(qualifier)));
    }
  }
Construct a TableName
@throws IllegalArgumentException if fullName equals old root or old meta. Some code depends on
                                 this.
hbase-common/src/main/java/org/apache/hadoop/hbase/TableName.java