web-dev-qa-db-fra.com

Comment extraire une chaîne entre deux délimiteurs

Duplicate possible:
sous-chaîne entre deux délimiteurs

J'ai une ficelle comme

"ABC [c'est pour extraire]"

Je veux extraire la partie "This is to extract" en Java. J'essaie d'utiliser la scission, mais cela ne fonctionne pas comme je le souhaite. Quelqu'un a-t-il une suggestion?

44
yogsma

Si vous avez juste une paire de crochets ([]) Dans votre chaîne, vous pouvez utiliser indexOf():

String str = "ABC[ This is the text to be extracted ]";    
String result = str.substring(str.indexOf("[") + 1, str.indexOf("]"));
88
Juvanis

S'il n'y a qu'un événement, la réponse d'Ivanovic est la meilleure façon, je suppose. Mais s'il y a beaucoup d'occurrences, vous devriez utiliser regexp:

\[(.*?)\] c'est votre modèle. Et dans chaque group(1) vous obtiendrez votre chaîne.

Pattern p = Pattern.compile("\\[(.*?)\\]");
Matcher m = p.matcher(input);
while(m.find())
{
    m.group(1); //is your string. do what you want
}
60
shift66

Essayez comme

String s = "ABC[ This is to extract ]";
        Pattern p = Pattern.compile(".*\\[ *(.*) *\\].*");
        Matcher m = p.matcher(s);
        m.find();
        String text = m.group(1);
        System.out.println(text);
9
Evgeniy Dorofeev
  String s = "ABC[This is to extract]";

    System.out.println(s);
    int startIndex = s.indexOf('[');
    System.out.println("indexOf([) = " + startIndex);
    int endIndex = s.indexOf(']');
    System.out.println("indexOf(]) = " + endIndex);
    System.out.println(s.substring(startIndex + 1, endIndex));
7
milanpanchal