2013-09-15 3 views
0
if (word.matches("^[a-zA-Z_](.)][a-zA-Z_]*$")) { 
      System.out.println(word); 
    } 

Мне нужно написать метод для определения вызова метода внутри класса. например. A a = новый A(); a.call();Обнаружение действительного вызова метода с использованием reagex

Мне нужно найти форму a.call() моего класса.

+4

Просьба уточнить вашу конкретную проблему или добавить дополнительные детали, чтобы выделить именно то, что вам нужно. Как это написано в настоящее время, трудно точно сказать, что вы просите. (скопировано из диалогового окна с флагом) – gparyani

+0

Это должно работать для вашего относительно простого примера: ''^[a-zA-Z _] + \\. [a-zA-Z_] + \\ (\\); $ "', но он не найдет вызовы методов, содержащие аргументы, или случаи, когда объект является результатом выражения. Это будет за пределами того, что регулярное выражение может обрабатывать самостоятельно. – JLRishe

ответ

0
  • [a-zA-Z_] соответствует только одному символу. Добавьте * или + для соответствия нескольким символам.
  • . соответствует любому символу. Escape ., чтобы соответствовать буквальной точке.

Попробуйте следующее регулярное выражение:

"[a-zA-Z_]\\w*\\.[a-zA-Z_]\\w*\\(.*?\\)" 

Пример:

import java.util.regex.*; 

class T { 
    public static void main(String[] args) { 
     String word = "A a =new A(); a.call();"; 
     Pattern pattern = Pattern.compile("[a-zA-Z_]\\w*\\.[a-zA-Z_]\\w*\\(.*?\\)"); 
     Matcher matcher = pattern.matcher(word); 
     while (matcher.find()) { 
      System.out.println(matcher.group()); 
     } 
    } 
} 
+0

См. Http://ideone.com/Bai20m – falsetru

+0

thanx u сохранить мой день – Chathuranga

+1

@Chathuranga, вы должны знать, что этот код не может обрабатывать 'person.sayHello (other.getName())'. (Наличие нескольких пар круглых скобок) – falsetru

Смежные вопросы