Java 检查字符串是否仅包含特定的重复特殊字符
我有一个字符串格式Java 检查字符串是否仅包含特定的重复特殊字符,java,regex,Java,Regex,我有一个字符串格式^%^%^%^%^%。我需要检查字符串是否只有重复的^% 比如说 1. ^%^%^%^% > Valid 2. ^%^%aa^%^% > Invalid 3. ^%^%^%^%^%^% > Valid 4. ^%^%^^%^% > Invalid 5. %^%^%^%^% > Invalid 如何在Java中实现这一点 我试过: String text = "^%^%^%^%^%"; if (Pattern.matches(("[\\^\
^%^%^%^%^%
。我需要检查字符串是否只有重复的^%
比如说
1. ^%^%^%^% > Valid
2. ^%^%aa^%^% > Invalid
3. ^%^%^%^%^%^% > Valid
4. ^%^%^^%^% > Invalid
5. %^%^%^%^% > Invalid
如何在Java中实现这一点
我试过:
String text = "^%^%^%^%^%";
if (Pattern.matches(("[\\^\\%]+"), text)==true) {
System.out.println("Valid");
} else {
System.out.println("Invalid");
}
然而,它给了我有效的案例4和5
String[] text = {"^%^%^%^%","^%^%aa^%^%","^%^%^%^%^%^%","^%^%^^%^%","%^%^%^%^%" };
for (String t: text) {
if(Pattern.matches(("[\\^\\%]+[a-z]*[a-z]*[(\\^\\%)]+"), t)==true) {
System.out.println("Valid");
} else {
System.out.println("Invalid");
}
}在您的模式中,您使用仅匹配所列字符中的一个的,然后重复该1+次
您可以使用该^
来锚定字符串的开头,并以$
结束以断言字符串的结尾
然后重复1+次匹配\\^%
^(?:\\^%)+$
尝试这种模式^(?:\^%)+$
说明:
^
-匹配字符串的开头
(?:…)
-非捕获组
\^%
-按字面意思匹配^%
(?:\^%)+
-匹配^%
一次或多次
$
-匹配字符串的结尾
您只需执行以下操作:
if (str.replace("^%", "").isEmpty()) {
…
}
replace
方法尽可能频繁地替换字符串,因此它完全符合您的需要
它还匹配空字符串,根据规范,空字符串“只包含此模式”。在这样的情况下,您应该始终询问空字符串是否也意味着空字符串。您可以在此处使用它检查正则表达式:然后您可以在程序中使用它。或者您可以查看此网站:了解如何构造正则表达式。将您的
[]
更改为()
。此外,您不需要这两个选项中的任何一个:\\谢谢,我认为它可以工作,但我仍然需要\\哦,是的,^
不需要转义。否则,它将表示输入/行的开头。正则表达式不得包含任何字母。这要么是错误的,要么是多余的。祝贺你。唯一能解释他做错了什么的答案是:谢谢,上面的答案同样适用。使用(\\^%)+作为正则表达式模式怎么样?@Nick这也是可能的。您将获得一个捕获组,其中将包含^%