如何判断一个字符串是UUID类型?

Elt*_*ang 39 java

在我的项目中,我UUID.fromString()用来将字符串转换为UUID,但如果字符串不是UUID类型,它将抛出exception,那么如何验证这个字符串?

Saš*_*jak 71

处理异常并在这种情况下执行某些操作.例如 :

try{
    UUID uuid = UUID.fromString(someUUID);
    //do something
} catch (IllegalArgumentException exception){
    //handle the case where string is not valid UUID 
}
Run Code Online (Sandbox Code Playgroud)

  • 这不行!我遇到someUUID为"1-1-1-1-1"但UUID.formString("1-1-1-1-1")返回"00000001-0001-0001-0001-000000000001"的问题,基本上它确实转换为UUID表示.你需要使用像`Pattern p = Pattern.compile("[0-9a-f] {8} - [0-9a-f] {4} - [0-9a-f] {4} - [0]这样的正则表达式-9a-f] {4} - [0-9a-f] {12} $");`然后`p.matcher(uuidString).matches();` (38认同)
  • 请注意,这不适用于Java 8.请参阅https://bugs.java.com/view_bug.do?bug_id=8159339.作为替代方案,您可以使用"UUID.fromString(uuid).toString().equals(uuid)" (18认同)
  • 拥有包含UUID和其他元素的数据可能没有例外.例外应该是例外,而不是常规; 不要使用异常进行流量控制.[有很多原因.](https://www.google.com/search?q=exception+flow+control) (9认同)
  • 如果在您的应用程序的上下文中,您希望有一个UUID,那么在那里处理它是合理的,并且字符串是无效格式也是例外.另一方面,如果您的应用程序是解析器,并且语法在特定替代方案中接受UUID和其他类型的标识符,则测试这样的格式是不合适的. (7认同)
  • @mkilic 听起来像是 JDK 中的一个错误。也很糟糕,我们没有 `UUID.tryParse(String value)` 或类似的东西。 (4认同)
  • java.util.UUID.fromString() 正在执行该验证。遗憾的是语言设计者没有公开布尔 isValid() 方法 - 似乎是最常见的事情,并且可以在 fromString() 中重用 isValid (2认同)

Imr*_*ran 45

您应该使用正则表达式来验证它,例如:

/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/
Run Code Online (Sandbox Code Playgroud)

用鸡蛋测试 01234567-9ABC-DEF0-1234-56789ABCDEF0

或括号

/^\{?[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}??\}?$/
Run Code Online (Sandbox Code Playgroud)

  • 这比在这里的另一个答案中解析 UUID 的简单 try/catch 更容易损坏,并且更加冗长和不必要。 (3认同)
  • 只是把我的2美分扔在这里,我看到另一个答案是35票。如果这是两个选择,则应使用此选项。主要是因为,如果->`String [] var1 = var0.split(“-”);,我发现我正在使用的JDK只是基于该琐事引发了异常。如果(var1.length!= 5){抛出新的IllegalArgumentException(“无效的UUID字符串:” + var0); }` (2认同)