1

我试图检查大括号是否存在String. 但它返回false。谁能给我一个解决方案。

String code = "class Demo{public static void main(String[] args) {System.out.println(\"ABC\");}}";
Pattern p = Pattern.compile("^[{]");
Matcher m = p.matcher(code);
System.out.println(m.matches());

提前致谢

4

4 回答 4

2

需要评论

// the first character must be a {
Pattern p = Pattern.compile("^[{]");
Matcher m = p.matcher(code);
// the entire strings must match so you only accept "{" and nothing else.
System.out.println(m.matches());

我怀疑您不想要^并且您想要find()而不是matches() Find 将接受匹配的第一个子字符串。

于 2013-09-17T16:36:55.360 回答
1

^表示字符串的开头。它应该被删除,因为您想在字符串中的任何位置找到它。

哦,不要使用matchesfind而是使用。matches检查整个字符串是否与模式匹配,在字符串中find查找模式。

String code = "class Demo{public static void main(String[] args) {System.out.println(\"ABC\");}}";
Pattern p = Pattern.compile("[{]");
Matcher m = p.matcher(code);
System.out.println(m.find());

不过,contains("{")正如 Rohit 所提到的,它会更简单。

String code = "class Demo{public static void main(String[] args) {System.out.println(\"ABC\");}}";
System.out.println(code.contains("{"));

如果你想做一个替换,Matcher确实有一个replaceAll功能,但也有String{这会在每个: (\\{是另一种转义方式{)之前添加一个换行符

String code = "class Demo{public static void main(String[] args) {System.out.println(\"ABC\");}}";
System.out.println(code.replaceAll("\\{", "\n{"));

现在,如果我在您的使用方向上是正确的,那么您将无法使用正则表达式进行代码缩进。它是增量/递归的,在正则表达式中不起作用(很好)。您需要手动遍历字符串来执行此操作。

于 2013-09-17T16:34:02.213 回答
1

除了包含的内容之外,您的正则表达式不允许使用其他字符。^另外,我在唯一的开头修复了您的正则表达式 -匹配项String,因此您必须{String.

Matcher.matches()将尝试使整个字符串与正则表达式匹配。 Matcher.find()正在检查正则表达式模式是否存在于String

  String code = "class Demo{public static void main(String[] args) {System.out.println(\"ABC\");}}";
  Pattern p = Pattern.compile("[{]");
  Matcher m = p.matcher(code);
  System.out.println(m.find());
于 2013-09-17T16:34:58.587 回答
0

要么code.contains("{")按照@Rohit Jain 的建议使用,要么将其用作您的正则表达式:

Pattern p = Pattern.compile("^*.[{]*.");

如果没有通配符,模式将只匹配一个字符串,即"{"

于 2013-09-17T16:35:09.213 回答