Я получаю UUID в формате "005056963AB75FD48BDC59C100314C40" и хочу их проверить. Я пробовал код следующим образом:
public boolean isUUID(String uuid){
try {
UUID.fromString(uuid);
} catch (Exception e) {
return false;
}
return true;
}
Но это скажет мне, что "005056963AB75FD48BDC59C100314C40" не является допустимым идентификатором. С другой стороны, сайт http://guid.us/Test/GUID говорит мне об этом и возвращает мне UUID с добавлением "-". Есть ли элегантный способ проверить этот UUID в java или мне нужно вручную добавить "-" в нужные места?
попробуйте regex
uuid = uuid.replaceAll("(.{8})(.{4})(.{4})(.{4})(.+)", "$1-$2-$3-$4-$5");
UUID.fromString(uuid);
Вы можете использовать этот код регулярного выражения Java для размещения дефиса в нужном месте в строке UUID:
String s = "005056963AB75FD48BDC59C100314C40";
s = s.replaceAll(
"(?i)([a-f0-9]{8})([a-f0-9]{4})([a-f0-9]{4})([a-f0-9]{4})([a-f0-9]{12})",
"$1-$2-$3-$4-$5");
System.out.printf("UUID: [%s]%n", s);
//=> 00505696-3AB7-5FD4-8BDC-59C100314C40
Обновление: не регулярное выражение (thnks to @atamanroman)
StringBuilder sbr = new StringBuilder(s);
for(int i=8, j=0; i<=20; i+=4, j++)
sbr.insert(i+j, '-');
UUID uuid = UUID.fromString( sbr.toString() );
StringBuilder#insert(pos, "-")
вместо этого сумасшедшего регулярного выражения.