¿Qué es el algoritmo para completar la etiqueta de inicio HTML faltante en Java?

Puede haber una manera más fácil de hacer esto, pero te daré lo que se te ocurra sin buscar nada.

Supongo que su texto HTML se almacena como una cadena. Si no, conviértalo en una cadena. Luego use String.contains (““); para encontrar si la etiqueta existe. Si no es así, y ha determinado que la etiqueta está allí y desea que aparezca inmediatamente después, use (este puede no ser el método correcto, pero hay uno para esto en String) String. firstIndexOf (“>”); . Luego, utilizando ese índice, puede encontrar el método String o char [] con el equivalente de .insert (aboveIndex + 1, “”); Busque la documentación (por ejemplo, Google “Java 8 String” y haga clic en el enlace de documentos de Oracle) para encontrar los métodos que necesita.

En el peor de los casos que puedo imaginar, use String.spliterator () para hacer dos cadenas separadas en el índice donde desea que esté , y luego concatenarlas como String [0] + ”” + String [1] . Además, recomiendo usar StackOverflow sobre Quora para este tipo de preguntas, provenientes de alguien que haya hecho esto exactamente antes, jaja. ¡Espero que esto ayude!

PD: la búsqueda de Google es tu mejor amigo de codificación.

EDITAR: Entonces tengo una solución simple para usted aquí. La clave para implementar esto es hacer que cada una de las lecturas de entrada de su archivo HTML separe cada línea en una cadena. Tengo entendido que su pregunta es que este no es un escenario completo de desguace web en el que no sabe lo que necesita arreglado … eso sería realmente imposible.

SI sabe que todas sus entradas HTML terminan en , puede hacer que lea una línea hasta ese punto y decirle que finalice la nueva cadena después de que se lea . Supongo que ya lo has hecho en función de tu pregunta.

Entonces, una vez que tenga una Cadena, esta función se puede usar para hacer exactamente lo que le pide. Si no sabe con certeza si falta el , puede crear una Lista de cadenas para probar. así que si encuentra que contiene pero no use esto. lo mismo funcionaría para si lo ajusta en consecuencia. Es sencillo. Ni siquiera cerca de lo teóricamente imposible. Luego puede volver a colocarlo en su archivo almacenando todo como una serie de cadenas y escribiéndolo en el archivo en el orden apropiado.

Además de todas las respuestas, creo que esta es la forma de hacerlo más fácil. También verifica si está cerrando antes de lo que se supone que debe hacer. Tenga en cuenta que si hace un

something

está mal

Ahora para hacer esto es muy simple, inicialice una pila y comience a analizar desde la parte superior.

Empujaremos cualquier etiqueta de apertura a la pila, ignoraremos (por simplicidad) las etiquetas de cierre automático como
o
o

Cuando vemos etiquetas de cierre, sacamos una de la pila, si el elemento emergente es el mismo elemento que la etiqueta de cierre, es correcto.

Repetimos hasta el final y no debería tener nada en la pila.

Por simplicidad, veamos cómo analizaríamos este archivo html: JS Bin

analizador var = nueva pila ();
parser.push (‘html’); // analizador = [‘html’]
parser.push (‘cabeza’); // parser = [‘html’, ‘head’]
// ignora las metaetiquetas ya que no necesitan etiquetas de cierre
parser.push (‘título’); // parser = [‘html’, ‘head’, ‘title’]
// ahora vemos que la etiqueta de cierre es title,
parser.pop () // devuelve el título (que es el mismo que el elemento de cierre, es válido hasta este punto) // parser = [‘html’, ‘head’]
// ahora vemos cerrar la cabeza
parser.pop () // devuelve head (que es lo mismo que el elemento de cierre) // parser = [‘html’]

parser.push (‘cuerpo’); // parser = [‘html’, ‘body’]
parser.push (‘p’); // parser = [‘html’, ‘body’, ‘p’]

// ver cerrando la etiqueta p nuevamente
parser.pop () == ‘p’ // ya que al cerrar la etiqueta y la pila apareció el mismo elemento, es válido // parser = [‘html’, ‘body’]
// ahora vemos el cuerpo de cierre
parser.pop () == ‘cuerpo’; // analizador = [‘html’]
// ahora tenemos cierre html
parser.pop () == ‘html’; // analizador = [];

//fin

// Ahora aquí, el analizador no tiene nada que signifique que html sea válido.

Espero que esto haya sido útil 🙂

Míralo de otra manera. Tiene un proceso que puede finalizar o no en un tiempo finito (es decir, finaliza cuando alcanza el estado X). Si no sabemos cuánta entrada hay, entonces es imposible. Este es el “teorema central” de la informática [ver la respuesta de Marcas Neal a ¿Qué es la informática?].

Digamos que el estado que estamos buscando es cuándo insertar una etiqueta para finalizar una etiqueta que comenzó en algún momento anterior. Como la página tiene una longitud potencialmente infinita (desde una perspectiva teórica), el punto de terminación es “indecidible” (es decir, dónde colocar el ).

Por lo tanto, tal algoritmo es imposible por las “leyes” de la informática (teórica) sin una IA completa. Lo mismo es cierto para una apertura .

Un algoritmo puede detectar si falta o no un , pero no dónde ubicarlo. Como señaló el usuario, el nombre más común de este algoritmo es la validación HTML.

Dado que puede estar en cualquier lugar justo después de la etiqueta , tendría que analizar todo el archivo hacia atrás para encontrar una etiqueta de inicio faltante. Para encontrar una etiqueta final faltante, debe analizar todo el archivo hacia adelante.

¿Para averiguar dónde debería estar la etiqueta faltante? Todavía no tenemos AI capaz de eso, por lo que lo mejor que puede hacer, si no puede encontrar la etiqueta que falta, es emitir un mensaje de error, algo así como “Falta la etiqueta en la línea 25.” Entonces el programador puede decidir a dónde va. (Podría ir entre la y la H en Hola [debería] o la etiqueta podría estar en el lugar incorrecto).


muchas líneas aquí
Hola, esto es Java

está mal Probablemente debería ser

Hola, esto es Java

More Interesting

Probé el problema 'Impresión espiral de matriz' durante 2 días. Incluso después de ver la solución, sigo fallando. ¿Qué tengo que hacer?

¿Cuánto conocimiento de implementación de algoritmos usan realmente los programadores experimentados?

¿Hay algún libro sobre estructuras de datos y algoritmos que se centre más en la perspectiva de gestión de memoria de los algoritmos?

¿Cuántas repeticiones del algoritmo L, U, R, D en un cubo de Rubik se necesitarían para revertir el cubo a su permutación original?

Cómo ponerse al día con las matemáticas necesarias para poder comprender y analizar algoritmos si no sé sobre cosas como el registro

Cómo resolver estos problemas matemáticos a continuación

Cómo hacer un programa que imprima potencias de 2 hasta n en C ++

¿En qué paso de la prueba del algoritmo de Dijkstra utilizamos el hecho crucial de que los bordes no son negativos?

¿Qué es el algoritmo k-Nearest Neighbour? ¿Qué tipo de problemas puede resolver este algoritmo? ¿Qué tipo de matemática se requiere?

¿Podría haber estándares de cifrado que descansen en un problema NP-hard distinto de la factorización entera?

¿Se puede implementar un mapa usando Tree? ¿Se puede implementar un mapa usando List? Esto es específico de Java, pero me gustaría conocer el enfoque general.

¿Qué estructura de datos se utiliza para almacenar la pestaña reciente en el teléfono?

¿Cómo implemento un árbol N-ary en C?

¿Qué tan difícil es aprender por sí mismo cómo codificar algoritmos eficientes?

Inventé un algoritmo de búsqueda de cadenas. ¿Cómo hago para asegurarme de que lleva mi nombre? ¿Es posible patentarlo / copyright o alguna otra cosa? ¿Se pueden proteger los algoritmos?