我正在尝试编写一种方法来检查给定字符串仅是否包含这些{([])}个字符。
// Test strings
String S = "{U}" // should give FALSE
String S = "[U]" // should give FALSE
String S = "U" // should give FALSE
String S = "([)()]" // should give TRUE
我试过了:
if(S.matches("[{(\\[\\])}]")) {
return 1;
}
但这永远不会真实。
答案 0 :(得分:3)
String.matches()
将整个字符串与模式匹配。您尝试的模式失败,因为它只匹配单个字符 - 例如,"{".matches("[{(\\[\\])}]")
将返回true。您需要为正则表达式添加重复 - 如果要匹配空字符串,则为*
;如果字符串必须包含至少一个字符,则为+
,如下所示:
if(S.matches("[{(\\[\\])}]+")) {
return 1;
}
答案 1 :(得分:0)
if(S.matches("^[{(\\[\\])}]+$")) {
return 1;
}
^
- 行的开头
[]+
- 字符类[]
中包含的字符一次或多次
$
- 行尾
如果您想创建一个方法(正如您之前提到过的那样),您可能需要考虑创建返回boolean
的方法(请注意返回{{1} (boolean
或true
)不等于在Java中返回false
或1
:
0
如果您的目的是在条件满足时返回public boolean checkIfContainsOnlyParenthesis(String input) {
return input.matches("^[{(\\[\\])}]+$");
}
并且 - 例如 - 1
,当它不是时,您需要将该方法的返回值更改为{{1 }}:
0
通过这种方式,您可以将int
字符串作为该方法的参数传递,如下所示:
public int checkIfContainsOnlyParenthesis(String input) {
if(input.matches("^[{(\\[\\])}]+$")) {
return 1;
} else {
return 0;
}
}