想检查大括号的存在。但是回归虚假

时间:2013-09-17 16:30:52

标签: java regex

我试图检查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 个答案:

答案 0 :(得分: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会接受匹配的第一个子字符串。

答案 1 :(得分:1)

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

哦,不要使用matches,请改用findmatches检查整个字符串是否与模式匹配,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{"));

现在,如果我对你要去的地方是正确的,你就不能用正则表达式进行代码缩进。它是递增/递归的,在正则表达式中不起作用。您需要手动迭代字符串才能执行此操作。

答案 2 :(得分: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());

答案 3 :(得分:0)

使用code.contains("{")作为@Rohit Jain建议,或者使用此作为你的正则表达式:

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

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