Foros del Web » Programación para mayores de 30 ;) » Java »

Modificar string mediante Pattern y Matcher

Estas en el tema de Modificar string mediante Pattern y Matcher en el foro de Java en Foros del Web. He creado este algoritmo para sustituir cadenas usando una Pattern, pero de forma que cada cierto tipo de cadena tenga un sustituto propio, y tratando ...
  #1 (permalink)  
Antiguo 23/06/2010, 17:31
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Modificar string mediante Pattern y Matcher

He creado este algoritmo para sustituir cadenas usando una Pattern, pero de forma que cada cierto tipo de cadena tenga un sustituto propio, y tratando de que no desperdicie recursos.

Código:
String s = cadenaAcambiar

		Pattern p = Pattern.compile(patron);
		Matcher m = p.matcher(s);
		int i=0;
		
		while(!m.hitEnd()){
			
			if (m.find(i)){
				
				if (m.group().equals(A)){
					i = m.start();
					s = s.replaceAll(m.group(),   fmodificador( m.group()) );
					m = p.matcher(s);

				}else if  ( m.group().equals(B) ){
					i = m.start();
					s = s.replaceAll(m.group(),  fmodificador2( m.group()) );
					m = p.matcher(s);
				}
				
					
			}
		}
Lo voy a utilizar para elementos que no conozco de un texto muy grande, de ahí que necesite utilizar un patrón. El algoritmo funciona bien, pero me gustaría saber si existe alguna forma más directa/eficaz de hacerlo, algún método de Matcher que no haya visto o algo así.

Saludos.

Última edición por Xerelo; 24/06/2010 a las 12:46 Razón: Corregir error en el código
  #2 (permalink)  
Antiguo 23/06/2010, 21:49
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: Modificar string mediante Pattern y Matcher

Hola:

No entiendo el if y el else if. ¿No tienen la misma condición? ¿Qué es A?
¿No te vale el método replaceAll() de la clase String?

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 24/06/2010, 01:47
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: Modificar string mediante Pattern y Matcher

Imagínate un número de referencia de un producto, con dos letras indicando el tipo de producto, cuatro números como identificador y otra letra opcional para indicar otras características. Sería algo así: X1234R

Tengo una lista enorme de ellos en un texto, y quiero sustituirlos por su descripción. El patrón me sirve para detectar las referencias, pero no puedo hacer un replaceAll directo ya que me aplicaría la misma descripción a todo lo que cumpla el patrón (creo que funciona así ¿no?) ya que es única para cada producto.

Evidentemente no sé que productos van a aparecer en la lista, y necesito distinguirlos en función del tipo de producto y de la última letra.

Por eso necesito el if y el else (eran sólo para explicar que en función de la cadena se ejecuta una acción única), para que si el producto es Y1245 sustituirlo por una descripción, a J4659 por otra, y lo mismo con Q7777T.

Entre mis dudas está el hecho de si es más eficiente aplicar el replace de forma que sustituya TODAS las referencias exactamente iguales en el texto (mi ejemplo), o modificar únicamente UNA referencia cada vez que el Matcher la detecta.
  #4 (permalink)  
Antiguo 24/06/2010, 03:12
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: Modificar string mediante Pattern y Matcher

investiga sobre el uso de expresiones regulares, es muy similar a lo que estás intentando hacer.
  #5 (permalink)  
Antiguo 24/06/2010, 12:46
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: Modificar string mediante Pattern y Matcher

Si te fijas en el código que he puesto, es así como lo he hecho, solo que no quise poner las expresiones que utilizo porque no tienen importancia para lo que pregunto, y el código queda más claro.

Lo que quiero saber es si los métodos que he utilizado son los más directos, y si es mejor hacer las sustituciones con replaceAll o según las vaya encontrando el Matcher.

Supongo que dependerá del número de veces que aparezca repetida una misma referencia, pero me gustaría saber si estoy en lo cierto.

muchas repeticiones de pocos valores => replaceAll

pocas repeticiones de muchos valores => replace


chuidiang, me acabo de dar cuenta de por qué preguntas lo de qué es A, en el segundo if debería ir una B para expresar que es una condición distinta

Etiquetas: modificar, pattern, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:52.