首页 > 解决方案 > Java 用 0 填充 UUID,用于标准格式的缺失位置

问题描述

当尝试使用无效的 UUID 时,在 JAVA API 中定义的 UUID 输入会填充 0。

例如f185d2ab-50-4fd0-bbb3-af04543b6f05正在转换为f185d2ab-0050-4fd0-bbb3-af04543b6f05. 观察 UUID 的第二部分。有什么办法可以停止这种填充并用错误输入或其他东西做出回应

标签: javaapiuuidguiduniqueidentifier

解决方案


如果您查看UUID.fromString()我假设您正在使用的 Java 实现:

public static UUID fromString(String name) {
    String[] components = name.split("-");
    if (components.length != 5)
        throw new IllegalArgumentException("Invalid UUID string: "+name);
    for (int i=0; i<5; i++)
        components[i] = "0x"+components[i];

    long mostSigBits = Long.decode(components[0]).longValue();
    mostSigBits <<= 16;
    mostSigBits |= Long.decode(components[1]).longValue();
    mostSigBits <<= 16;
    mostSigBits |= Long.decode(components[2]).longValue();

    long leastSigBits = Long.decode(components[3]).longValue();
    leastSigBits <<= 48;
    leastSigBits |= Long.decode(components[4]).longValue();

    return new UUID(mostSigBits, leastSigBits);
}

https://github.com/openjdk-mirror/jdk7u-jdk/blob/master/src/share/classes/java/util/UUID.java

它是用 填充的0X,它会抛出的唯一失败是如果它在一个字符串中没有 5 个部分,但是如果你不喜欢这个,并且想要你自己的,你可以创建一个 Wrapper

public static UUID fromStringValidates(String inputUUID){

   //Apply pattern from StackOverflow to validate inputUUID
   //https://stackoverflow.com/questions/37615731/java-regex-for-uuid
   //Fail with error message you want
   
   return UUID.fromString(inputUUID);
}

推荐阅读