- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
#uuid "5231b533-ba17-4787-98a3--6ren">
如何从没有破折号的字符串创建 java.util.UUID?
"5231b533ba17478798a3f2df37de2aD7" => #uuid "5231b533-ba17-4787-98a3-f2df37de2aD7"
最佳答案
java.util.UUID.fromString(
"5231b533ba17478798a3f2df37de2aD7"
.replaceFirst(
"(\\p{XDigit}{8})(\\p{XDigit}{4})(\\p{XDigit}{4})(\\p{XDigit}{4})(\\p{XDigit}+)", "$1-$2-$3-$4-$5"
)
).toString()
5231b533-ba17-4787-98a3-f2df37de2ad7
或者解析hexadecimal的每一半字符串为 long
整数,并传递给 constructor of UUID
.
UUID uuid = new UUID ( long1 , long2 ) ;
一个 UUID是一个 128 位的值。 UUID 不是实际上由字母和数字组成,它是由位组成的。您可以将其视为描述一个非常非常大的数字。
我们可以将这些位显示为 128 个 0
和 1
字符。
0111 0100 1101 0010 0101 0001 0101 0110 0110 0000 1110 0110 0100 0100 0100 1100 1010 0001 0111 0111 1010 1001 0110 1110 0110 0111 1110 1100 1111 1100 0101 1111
人类不容易读取位,因此为方便起见,我们通常将 128 位值表示为 hexadecimal由字母和数字组成的字符串。
74d25156-60e6-444c-a177-a96e67ecfc5f
这样的十六进制字符串不是 UUID 本身,只是一种人性化的表示。连字符是按照 UUID 规范作为规范格式添加的,但是是可选的。
74d2515660e6444ca177a96e67ecfc5f
顺便说一句,UUID 规范明确规定,在生成十六进制字符串时必须使用小写字母,而大写字母应该可以作为输入。不幸的是,许多实现都违反了小写生成规则,包括来自 Apple、Microsoft 和其他公司的实现。见 my blog post .
以下是指 Java,而不是 Clojure。
在 Java 7(及更早版本)中,您可以使用 java.util.UUID类基于以连字符作为输入的十六进制字符串实例化 UUID。示例:
java.util.UUID uuidFromHyphens = java.util.UUID.fromString("6f34f25e-0b0d-4426-8ece-a8b3f27f4b63");
System.out.println( "UUID from string with hyphens: " + uuidFromHyphens );
但是,该 UUID 类在输入 没有 连字符的十六进制字符串时失败。这个失败是不幸的,因为 UUID 规范确实 not 需要以十六进制字符串表示的连字符。这失败了:
java.util.UUID uuidFromNoHyphens = java.util.UUID.fromString("6f34f25e0b0d44268ecea8b3f27f4b63");
一种解决方法是格式化十六进制字符串以添加规范连字符。这是我尝试使用正则表达式格式化十六进制字符串。当心...此代码有效,但我不是正则表达式专家。你应该让这段代码更健壮,比如在格式化之前检查字符串的长度是 32 个字符,之后是 36 个字符。
// -----| With Hyphens |----------------------
java.util.UUID uuidFromHyphens = java.util.UUID.fromString( "6f34f25e-0b0d-4426-8ece-a8b3f27f4b63" );
System.out.println( "UUID from string with hyphens: " + uuidFromHyphens );
System.out.println();
// -----| Without Hyphens |----------------------
String hexStringWithoutHyphens = "6f34f25e0b0d44268ecea8b3f27f4b63";
// Use regex to format the hex string by inserting hyphens in the canonical format: 8-4-4-4-12
String hexStringWithInsertedHyphens = hexStringWithoutHyphens.replaceFirst( "([0-9a-fA-F]{8})([0-9a-fA-F]{4})([0-9a-fA-F]{4})([0-9a-fA-F]{4})([0-9a-fA-F]+)", "$1-$2-$3-$4-$5" );
System.out.println( "hexStringWithInsertedHyphens: " + hexStringWithInsertedHyphens );
java.util.UUID myUuid = java.util.UUID.fromString( hexStringWithInsertedHyphens );
System.out.println( "myUuid: " + myUuid );
您可能会发现这种替代语法更具可读性,在正则表达式中使用 Posix 表示法,其中 \\p{XDigit}
代替 [0-9a-fA-F]
(参见 Pattern 文档):
String hexStringWithInsertedHyphens = hexStringWithoutHyphens.replaceFirst( "(\\p{XDigit}{8})(\\p{XDigit}{4})(\\p{XDigit}{4})(\\p{XDigit}{4})(\\p{XDigit}+)", "$1-$2-$3-$4-$5" );
完整示例。
java.util.UUID uuid =
java.util.UUID.fromString (
"5231b533ba17478798a3f2df37de2aD7"
.replaceFirst (
"(\\p{XDigit}{8})(\\p{XDigit}{4})(\\p{XDigit}{4})(\\p{XDigit}{4})(\\p{XDigit}+)",
"$1-$2-$3-$4-$5"
)
);
System.out.println ( "uuid.toString(): " + uuid );
uuid.toString(): 5231b533-ba17-4787-98a3-f2df37de2ad7
关于java - 从没有破折号的字符串创建 UUID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18986712/
我正在尝试使用 Javascript Regex 验证以下格式基本上破折号之前的第一组数字只能是 3 个数字字符。而破折号后面的字符只能是两个或三个数字字符。不允许使用其他字符或空格。 我看过几篇关于
我试图用 gsub 替换我认为是标准的破折号。我正在测试的代码是: gsub("-", "ABC", "reported – estimate") 但是,这没有任何作用。我将破折号复制并粘贴到 htt
我有一个带有可删除行和列的破折号 DataTable 对象。我想根据可见行更新图形。我不确定如何创建回调以及要传递哪些参数。在浏览器中删除行时,存储在表对象中的数据实际上可能不会更改。 from da
我正在尝试为超过一周前的日期着色。但当我这样做时,它会为所有日期着色。 首先我在破折号代码之前尝试过它,它工作得很好 df = pd.DataFrame(list(collection_jobs.fi
我正在尝试匹配 python 中的以下行,但是该行不起作用。 示例文本为: usr/local/java/latest/bin/java-Djava.util.logging.config.file=
我目前正在使用以下 JavaScript 代码: concatedSubstring.replace(/\//g, '-').replace(/[A-Za-z]/g, function(c){
我在 postgreSQL 中使用 regex_replace 并试图去除字符串中不是字母或数字的任何字符。但是,使用此正则表达式: select * from regexp_replace('bli
我正在尝试选择类名中有破折号的对象 - 例如 $("div.nav-next"); 它不起作用 - 似乎破折号是问题所在 - 有什么想法吗?谢谢 最佳答案 试试这个。去掉“div”部分。 $('.na
如何将连字符打印到这样的输出中,例如 344-34-4333。如果这个 ID 是从一个没有连字符的文件中读取的,我怎样才能让它打印 xxx-xx-xxxx 3 to 2 to 4 ? 最佳答案 std
数字小部件可以在同一个仪表板上多次使用吗? 例如我想显示每个团队成员的当前分数,每个团队成员一个带有向上/向下箭头的小部件,将当前分数与最后一个分数进行比较,如果分数上升,则小部件背景为绿色,如果分数
如何在 Linux 中使用命令行将目录名中的空格替换为 -(破折号)? 注意:有数百个目录,每个目录都有子目录。 我尝试了以下命令,但它返回一条消息'call: rename from to file
当我使用 android 虚线时,它在小屏幕上工作正常,但在 Samsung S3 设备和更高版本中不工作。 截图 和 drawable/dashline.xml XML
我正在使用 GNU bash 运行 Windows,版本 4.3.46(2)-release (x86_64-pc-msys) 可重现的例子 我有一个很大的制表符分隔的文本文件,其中有很多行和列。这只
因此,我正在构建一个读取传感器数据并使用 plotly 绘制获取的数据的项目。使用 interval = 1000 效果很好,但 interval = 500 会导致图形变得歇斯底里。 这是我的图表变
我有以下正则表达式,但我希望文本框允许使用破折号 ^[0-9a-zA-Z \/_?:.,\s]+$ 有人知道我该怎么做吗? 最佳答案 破折号必须是字符类中的第一个/最后一个字符,才能按字面使用: ^[
我经常在 PHP MVC 应用程序中看到 Apache RewriteRule,如下所示: RewriteRule ^.*$ - [NC,L] Apache docs for the RewriteR
我在 zsh 脚本中遇到基本名称问题。想象一下 $directory 包含一个带有前导破折号的文件名,在我的例子中它是“-Fast-”。然后脚本执行 folder=$(basename
我需要制作一条在变量后面有破折号的路线。我想要的很容易用代码解释(这是我尝试过的,但它不起作用) Route::any('tournament/{sportName}/{regionName}/{to
我在 zsh 脚本中遇到基本名称问题。想象一下 $directory 包含一个带有前导破折号的文件名,在我的例子中它是“-Fast-”。然后脚本执行 folder=$(basename
简单的说: echo "xxxxx Tyyy zzzzz" | egrep "\byyy\b" (不匹配哪个是正确的) echo "xxxxx T-yyy zzzzz" | egrep "\byyy\
我是一名优秀的程序员,十分优秀!