Quiero llegar a todo el texto entre 2 palabras wherver es.
Por ejemplo:

String Testing="one i am here fine two one hope your are also fine two one ok see you two";

De la cadena anterior, quiero recuperar las palabras entre «uno» y «dos» en la serie:

Mi resultado debe ser almacenado en la matriz como esta:

String result[1] = i am here fine
String result[2] = hope your are also fine  
String result[3] = ok see you

Cómo hacerlo en java?

Gracias de antemano

  • Gnaniyar Zubair

4 Comentarios

  1. 7
    String input = "one i am here fine two one hope your are also fine two one ok see you two;";
    Pattern p = Pattern.compile("(?<=\bone\b).*?(?=\btwo\b)");
    Matcher m = p.matcher(input);
    List<String> matches = new ArrayList<String>();
    while (m.find()) {
      matches.add(m.group());
    }
    

    Esto creará una Lista de todo el texto entre «uno» y «dos».

    Si quieres una versión más simple en la que no usa lookaheads/lookbehinds tratar:

    String input = "one i am here fine two one hope your are also fine two one ok see you two;";
    Pattern p = Pattern.compile("(\bone\b)(.*?)(\btwo\b)");
    Matcher m = p.matcher(input);
    List<String> matches = new ArrayList<String>();
    while (m.find()) {
      matches.add(m.group(2));
    }
    

    Nota: Java arrays son de base cero no basada en uno así en tu ejemplo, el primer resultado sería en result[0] no result[1]. En mi solución, el primer partido es en matches.get(0).

    • +1 Segundo regex es mejor, no es necesario utilizar lookaround, especialmente lookbehind, a menos que usted necesita, es la eficiencia de un asesino!
    • HOLA cletus, increíble, gracias por su respuesta inmediata. muchas gracias.
    • He intentado como esto: en lugar de «uno», mis valores de partida es :/c/document_library/get_file? el valor final es ( en lugar de dos): &groupId= Patrón p = Patrón.compile(«(\\b/c/document_library/get_file?uuid=\\b)(.*?)(\\b&groupId=\\b)»); Comparador m = p.combinador(contenido); Lista<Cadena> coincide con = new ArrayList<Cadena>(); Lista<Cadena> resultado = new ArrayList<Cadena>(); while (m.find()) { partidos.agregar(m.grupo()); } for(int z=0; z<cerillas.size(); z++) { resultado.agregar(los partidos.get(z)); } System.a cabo.println(«result1 >>> =» + partidos.get(0)); Pero estoy recibiendo Index =0 ; tamaño = 0….
  2. 2

    Manera más fácil (escrito para Groovy shell), menos cualquier error de manipulación:

    public String textBetweenWords(String sentence, String firstWord, String secondWord)
    {
        return sentence.substring(sentence.indexOf(firstWord) + firstWord.length(), 
            sentence.indexOf(secondWord));
    }
    
    String between = textBetweenWords("Hello my dear cousin!", "Hello", "cousin");
    
    println("[" + between + "]")
    
  3. 1

    Retirar el Java Patrón clase que permite el uso de expresiones regulares para identificar subcadenas y, en consecuencia, dividir un mayor cadena. Usted necesita algo como

    Pattern.compile("\bone\B");
    

    para identificar ‘uno’. El \b y \B son los límites de las palabras de los partidos. Usted necesita de estos para que no accidentalmente coinciden en que «alguien» en lugar de la palabra «uno» (como un aparte, me gustaría recomendar un delimitador distinto en lugar de las palabras «uno», «dos», etc.)

Dejar respuesta

Please enter your comment!
Please enter your name here