How to judge a string is UUID type?
在我的项目中,我使用UUID.fromString()将字符串转换为UUID,但如果字符串不是UUID类型,它将抛出exception,那么如何验证此字符串?
-
试试stackoverflow.com/questions/18724750/ - 它可能就是你想要的。
-
可能的重复:stackoverflow.com/questions/7905929/how-to-test-valid-uuid-guid
处理异常并在这种情况下执行某些操作。 例如 :
1 2 3 4 5 6
| try{
UUID uuid = UUID. fromString(someUUID );
//do something
} catch (IllegalArgumentException exception ){
//handle the case where string is not valid UUID
} |
-
拥有包含UUID和其他元素的数据可能没有例外。例外应该是例外,而不是常规;不要使用流量控制的例外。有许多的原因。
-
docs.oracle.com/javase/7/docs/api/java/util/该方法抛出该异常。在那里处理它是完全合理的。在这种特殊情况下的处理可能只是一些记录以供进一步参考。
-
如果在您的应用程序的上下文中,您希望有一个UUID,并且字符串是无效格式将是例外情况,那么在那里处理它是合理的。另一方面,如果您的应用程序是解析器,并且语法在特定替代方案中接受UUID和其他类型的标识符,则测试这样的格式是不合适的。
-
这不行!我遇到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();
-
此异常的测试仅适用于微不足道的情况,不应用于验证。如上所述,这不仅仅是因为它是一个例外,而且因为JVM可能使用比您预期的更简单的测试。我的例如使用此测试抛出异常:String[] var1 = var0.split("-"); if (var1.length != 5) { throw new IllegalArgumentException("Invalid UUID string:" + var0); }这也解释了上述注释。
-
请注意,这不适用于Java 8.请参阅此处bugs.java.com/view_bug.do?bug_id=8159339。作为替代方案,您可以使用"UUID.fromString(uuid).toString()。equals(uuid)"
-
@mkilic听起来像是JDK中的一个错误。还糟透了我们没有UUID.tryParse(String value)或类似。
您应该使用正则表达式来验证它,例如:
1
| /^[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}$/ |
用eg.g 01234567-9ABC-DEF0-1234-56789ABCDEF0测试它
或括号
1
| /^\{?[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}??\}?$/ |
-
刚刚在这里扔了2美分,因为我看到了另外35个选票的答案。人们应该使用这个,如果这是两个选择。主要是因为我发现我使用的JDK只是基于这个琐事抛出异常,如果 - > String[] var1 = var0.split("-"); if (var1.length != 5) { throw new IllegalArgumentException("Invalid UUID string:" + var0); }
-
stackoverflow.com/questions/18724750/
-
上面的第二个正则表达式允许括号有问题。它认为UUID只有一个开放或结束大括号有效,例如:{77921671-41fa-4f61-83ea-5d60b76a264e
-
这更容易破坏,并且比在这里的另一个答案中解析UUID的简单try / catch更加冗长和不必要。