Java UUID是不是区分大小写
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java UUID是不是区分大小写相关的知识,希望对你有一定的参考价值。
uuid返回的是16进制数。所以其实是不区分大小写的。但是大部分情况都会把它当字符串来使用,这时就是区分大小写了。 参考技术A
首先说一下原理,我所知道由Java生成的UUID是通过java.Util.UUID的静态方法randomUUID()来生成的。而UUID一般用于数据库的主键填充。
然后回答你的问题,如果你直接使用UUID类的这个方法生成UUID的话,默认是小写英文字符和数字的组合(更准确地说是16进制数)。如果你想区分大小写,那么有两种方法:
1、在生成UUID后做大写处理,再存入数据库。当然,你在查询数据库的数据时,涉及到主键时也要注意相应条件的改变;
2、先存入数据库,然后在查询条件中进行处理。一般的关系数据库都会有字符大小写相关的函数。
结论:默认生成的UUID是小写的,可以通过其他方式将其改成大写。因为数据库对大小写是区分的,所以相当于对UUID也是区分大小写的。
参考技术B首先UUID不是Java的,UUID含义是通用唯一识别码 (Universally Unique Identifier),这 是一个软件建构的标准。
Java只是提供了生成UUID的方法,大小写是否区分是看你的代码逻辑判断,你希望大小写区分就区分,不区分就忽略大小写比较。
Java中UUID生成的时候,默认是小写的,比如这个(ff3c1234-4108-4679-abdd-fe45dd713780)
Java中生成UUID后,可以通过toLowerCase()转换成小写。通过.toUpperCase()转换成大写。
大小写一致后,在进行对比。
但大部分情况都会把它当字符串来使用,这时就是区分大小写了。
Java RegEx 是不是不区分大小写?
【中文标题】Java RegEx 是不是不区分大小写?【英文标题】:Is Java RegEx case-insensitive?Java RegEx 是否不区分大小写? 【发布时间】:2011-03-27 01:16:50 【问题描述】:在 Java 中,当执行 replaceAll 以查找正则表达式模式时:
replaceAll("\\?i\\b(\\w+)\\b(\\s+\\1)+\\b", "$1");
(删除重复的连续不区分大小写的单词,例如测试测试),我不确定我把 ?i
放在哪里。我读到它应该在开头,但如果我把它拿出来,我会发现重复的连续单词(例如测试测试),但不是不区分大小写的单词(例如测试测试)。所以我想我可以在开头添加 ?i ,但这似乎并没有完成工作。有什么想法吗?谢谢!
【问题讨论】:
看看这个***.com/a/55980176/3593084 【参考方案1】:如果您的整个表达式不区分大小写,则只需指定 CASE_INSENSITIVE
标志:
Pattern.compile(regexp, Pattern.CASE_INSENSITIVE)
【讨论】:
感谢您的回答。这正是我一直在寻找的。在 python 中,我们有 re.IGNORECASE 在 JAVA 中寻找类似的答案。 Bit 它不适用于某些西里尔符号和德语变音符号。【参考方案2】:RegexBuddy 告诉我是否要在开头包含它,这是正确的语法:
"(?i)\\b(\\w+)\\b(\\s+\\1)+\\b"
【讨论】:
【参考方案3】:是的,可以在 Java 正则表达式中随意启用和禁用不区分大小写。
看起来你想要这样的东西:
System.out.println(
"Have a meRry MErrY Christmas ho Ho hO"
.replaceAll("(?i)\\b(\\w+)(\\s+\\1)+\\b", "$1")
);
// Have a meRry Christmas ho
请注意嵌入 Pattern.CASE_INSENSITIVE
标志是(?i)
而不是\?i
。另请注意,已从模式中删除了一个多余的 \b
。
(?i)
放置在模式的开头以启用不区分大小写。在这种特殊情况下,它不会在模式的后面被覆盖,因此实际上整个模式是不区分大小写的。
值得注意的是,实际上您可以将不区分大小写限制在整个模式的某些部分。因此,将它放在哪里的问题实际上取决于规范(尽管对于这个特定问题并不重要,因为\w
不区分大小写。
为了演示,这里有一个类似的例子,将"AaAaaA"
之类的字母折叠成"A"
。
System.out.println(
"AaAaaA eeEeeE IiiIi OoooOo uuUuUuu"
.replaceAll("(?i)\\b([A-Z])\\1+\\b", "$1")
); // A e I O u
现在假设我们指定只有以大写字母开头的运行才应该折叠。然后我们必须把(?i)
放到合适的位置:
System.out.println(
"AaAaaA eeEeeE IiiIi OoooOo uuUuUuu"
.replaceAll("\\b([A-Z])(?i)\\1+\\b", "$1")
); // A eeEeeE I O uuUuUuu
更一般地说,您可以根据需要启用和禁用模式中的任何标志。
另见
java.util.regex.Pattern
regular-expressions.info/Modifiers
在正则表达式中指定模式
你可以用/(?i)regex/
代替/regex/i
(Java中的Pattern.CASE_INSENSITIVE
)
只为正则表达式的一部分打开和关闭模式
你也可以/first(?i)second(?-i)third/
修饰符跨度
你也可以/first(?i:second)third/
regular-expressions.info/Word Boundaries(\w
和 \s
之间总是有一个 \b
)
相关问题
Can you make just part of a regex case-insensitive? Case sensitive and insensitive in the same pattern【讨论】:
【参考方案4】:您还可以将您要检查模式匹配的初始字符串引导为小写。并分别在您的模式中使用小写符号。
【讨论】:
【参考方案5】:您还可以匹配不区分大小写的正则表达式,并通过使用 Pattern.CASE_INSENSITIVE 常量使其更具可读性,例如:
Pattern mypattern = Pattern.compile(MYREGEX, Pattern.CASE_INSENSITIVE);
Matcher mymatcher= mypattern.matcher(mystring);
【讨论】:
这比(?i)
更易读,Java 正则表达式已经很不可读了:S以上是关于Java UUID是不是区分大小写的主要内容,如果未能解决你的问题,请参考以下文章