Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 检查字符串是否仅包含特定的重复特殊字符_Java_Regex - Fatal编程技术网

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这也是可能的。您将获得一个捕获组,其中将包含
^%