java - Java 用 0 填充 UUID,用于标准格式的缺失位置
问题描述
当尝试使用无效的 UUID 时,在 JAVA API 中定义的 UUID 输入会填充 0。
例如f185d2ab-50-4fd0-bbb3-af04543b6f05
正在转换为f185d2ab-0050-4fd0-bbb3-af04543b6f05
. 观察 UUID 的第二部分。有什么办法可以停止这种填充并用错误输入或其他东西做出回应
解决方案
如果您查看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);
}
推荐阅读
- javascript - AngularJS 没有从地址查找中检测到输入中的值
- python - how to calculate the mean of an array using grouping variables in python?
- android - 离线模式下基于距离的聚类
- c++ - std::async,std::promise 和 std::packaged_task 会阻塞主线程。它们的含义是什么?
- wordpress - 如果未设置属性,则隐藏短代码的特定部分
- javascript - 获取标记但 lat & lng 为空 - vue.js
- php - Codeigniter 路由抛出 404 page not found 错误
- reactjs - 无法从库中导入反应组件
- wix - 如何在不使用 c# 的情况下使用 wix 安装程序将 .msi 安装到远程虚拟机
- jquery - jQuery比较表单输入数组,颜色差异