private static boolean isValidV2BucketName(final String bucketName,
                                        final boolean throwOnError) {

        if (bucketName == null) {
            return exception(throwOnError, "Bucket name cannot be null");
        }

        if (bucketName.length() < MIN_BUCKET_NAME_LENGTH ||
            bucketName.length() > MAX_BUCKET_NAME_LENGTH) {

            return exception(
                throwOnError,
                "Bucket name should be between " + MIN_BUCKET_NAME_LENGTH + " and " + MAX_BUCKET_NAME_LENGTH +" characters long"
            );
        }

        if (ipAddressPattern.matcher(bucketName).matches()) {
            return exception(
                    throwOnError,
                    "Bucket name must not be formatted as an IP Address"
            );
        }

        char previous = '\0';

        for (int i = 0; i < bucketName.length(); ++i) {
            char next = bucketName.charAt(i);

            if (next >= 'A' && next <= 'Z') {
                return exception(
                    throwOnError,
                    "Bucket name should not contain uppercase characters"
                );
            }

            if (next == ' ' || next == '\t' || next == '\r' || next == '\n') {
                return exception(
                    throwOnError,
                    "Bucket name should not contain white space"
                );
            }

            if (next == '.') {
                if (previous == '\0') {
                    return exception(
                        throwOnError,
                        "Bucket name should not begin with a period"
                    );
                }
                if (previous == '.') {
                    return exception(
                        throwOnError,
                        "Bucket name should not contain two adjacent periods"
                    );
                }
                if (previous == '-') {
                    return exception(
                        throwOnError,
                        "Bucket name should not contain dashes next to periods"
                    );
                }
            } else if (next == '-') {
                if (previous == '.') {
                    return exception(
                        throwOnError,
                        "Bucket name should not contain dashes next to periods"
                    );
                }
                if (previous == '\0') {
                    return exception(
                            throwOnError,
                            "Bucket name should not begin with a '-'"
                    );
                }
            } else if ((next < '0')
                       || (next > '9' && next < 'a')
                       || (next > 'z')) {

                return exception(
                     throwOnError,
                    "Bucket name should not contain '" + next + "'"
                );
            }

            previous = next;
        }

        if (previous == '.' || previous == '-') {
            return exception(
                throwOnError,
                "Bucket name should not end with '-' or '.'"
            );
        }

        return true;
    }
Validate whether the given input is a valid bucket name. If throwOnError
is true, throw an IllegalArgumentException if validation fails. If
false, simply return 'false'.

@param bucketName the name of the bucket
@param throwOnError true to throw exceptions on failure
@return true if the name is valid, false if not
aws-java-sdk-s3/src/main/java/com/amazonaws/services/s3/internal/BucketNameUtils.java