Удалять текст до первого происшествия в Java

Как возможно удалять часть текста до того, чтобы находить первое происшествие? Удаляя также расположенное напротив происшествие.

Текст примера:

<div>soy la primera linea</div><div>soy la segunda linea</div>

серьезное происшествие </div> так конечный текст должен бы быть

<div>soy la segunda linea</div>
7
задан 28.08.2016, 11:40
5 ответов

Он использует indexOf, чтобы находить первое происшествие </div>, и obtГ©n субцепь с substring:

String str = "<div>soy la primera linea</div><div>soy la segunda linea</div>";
str = str.substring(str.indexOf("</div>") + 6);
System.out.println(str); // <div>soy la segunda linea</div>
4
ответ дан 24.11.2019, 13:32

Не используя регулярных выражений podrГ-схвати делать что-то asГ-: Вышедшие

public class Ejemplo {

  public static void main(String[ ] arg) 
  {
    String cadena = "<div>soy la primera linea</div><div>soy la segunda linea</div>";
    System.out.println(cadena);

    String patron = "</div>";
    int posicion = cadena.indexOf(patron);

    System.out.println(cadena.subSequence(posicion+patron.length(),cadena.length()));

  }
}

:

yo@pc:/tmp⟫ javac Ejemplo.java  
yo@pc:/tmp⟫ java Ejemplo
<div>soy la primera linea</div><div>soy la segunda linea</div>
<div>soy la segunda linea</div> 

Г‰chale беглый взгляд в ссылку api java на классе String .

6
ответ дан 24.11.2019, 13:32

Есть миллионы мотивов, из-за которых не было бы нужно манипулировать HTML с методами String или regex. Есть большая информация в Вебе, но чтобы не вводить между тем деталь, следующий HTML способствовал бы тому, чтобы они побили козырем большинство этих попыток:

<!-- quiero eliminar hasta el primer </div> -->
<DIV id='elid'>soy la primera linea</DIV 
><div>soy la segunda linea</div>

Используя DOM

Это правильный способ это делать, так как он представляет в HTML как документ с узлами, и он предотвратит тебе будущие головные боли.

import java.io.StringReader;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.xml.sax.InputSource;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.ls.DOMImplementationLS;
import org.w3c.dom.ls.LSSerializer;


Чтобы конвертировать один String в Document:

public static Document loadXMLFromString(String xml) throws Exception
{
    xml = "<Wrapper>" + xml + "</Wrapper>";
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    InputSource is = new InputSource(new StringReader(xml));
    return builder.parse(is);
}


И потом, мы пробегаем все узлы, которые находятся в корне документа, до того, чтобы находить первого <div>. С этого времени, мы добавляем один StringBuilder.

String texto = "<!-- quiero eliminar hasta el primer </div> -->\n<DIV id='elid'>soy la primera linea</DIV \n ><div>soy la segunda linea</div>";

//String -> doc
Document doc = loadXMLFromString(texto);

//Construir el serializer y sacar la declaración XML
DOMImplementationLS lsImpl = (DOMImplementationLS)doc.getImplementation().getFeature("LS", "3.0");
LSSerializer lsSerializer = lsImpl.createLSSerializer();
lsSerializer.getDomConfig().setParameter("xml-declaration", false);

//Bucle en todos los nodos de la raíz
Node docRoot = doc.getDocumentElement();
NodeList childNodes = docRoot.getChildNodes();
StringBuilder sb = new StringBuilder();
Boolean divEncontrado = false;
for (int i = 0; i < childNodes.getLength(); i++) {
    if (!divEncontrado) {
        //Se encontró?
        divEncontrado = childNodes.item(i).getNodeName().equalsIgnoreCase("div");
    } else {
        //Si se encontró antes, agregarlo al StringBuilder
        sb.append(lsSerializer.writeToString(childNodes.item(i)));
    }
}
String resultado = sb.toString();

System.out.println(resultado);

Результат:

<div>soy la segunda linea</div>

Demo в ideone.com

5
ответ дан 24.11.2019, 13:32

Ты можешь пробовать со следующей expresiГіn регулярная:

<div>.*?</div>

visual

Это:

String input = "<div>soy la primera linea</div><div>soy la segunda linea</div>";

System.out.println(
    input.replaceFirst("<div>.*?</div>", "")
);  // imprime "<div>soy la segunda linea</div>"
4
ответ дан 24.11.2019, 13:32

я реализую, таким образом:

    String pattern = "</div>";
    String cadena = "<div>soy la primera linea</div><div>soy la segunda linea</div>";
    System.out.println(cadena.substring(cadena.indexOf(pattern) + pattern.length()));

ты получаешь как выход:

<div>soy la segunda linea</div>
1
ответ дан 24.11.2019, 13:32