2

Recibo de un WebService strings similares a este: 19 Y 19-A (son cruzamientos de calles).

lo que necesito, es que pueda quedarme con los valores 19 y 19-A, Eliminando la "Y" de la cadena, de forma que me queden en 2 strings, algo como esto:

String1=19
String2=19-A

Tiene que considerarse que, en algunos registros, la letra "y" puede existir como nombre de alguno de los dos cruzamientos, eso es lo que me está creando este dilema. Anexo el código que tengo hasta ahora (lógicamente el string lo cambié para ayudar a ejemplificar:

    String string = "19 Y 19-A";
String[] parts = string.split("Y");
String part1 = parts[0]; // 19 
String part2 = parts[1]; // 19-A
L. Ronquillo
  • 2,476
  • 2
  • 14
  • 35
  • 1
    ¿Podrías colocar una muestra de datos que recibes del WebService por favor? – fredyfx Jul 24 '17 at 17:31
  • por el momento no tengo registros que concuerden con el problema, pero, si por ejemplo, llegase a existir el caso en el que el WebService devuelva los cruzamientos "Yamcha y 15-B" el split lo hará en la Y de "Yamcha" – L. Ronquillo Jul 24 '17 at 17:34
  • 1
    ¿En algunos casos podrías tener algo como esto: `Calle José y María 19 y Calle Primera 19-A`? O como esto: `Calle José y María 19 y Calle María y José 19-A` o... peor aún `Calle José y María 19Y y Calle María y José 19-Z` o... muuucho peor aún: `Calle 19 de José y María 19Y y Calle 20 de María y José 19-Z`? Es importante que comentes posibilidades de ese tipo en tu pregunta. – A. Cedano Jul 24 '17 at 17:35
  • en efecto, esos casos pueden suceder @A.Cedano – L. Ronquillo Jul 24 '17 at 17:36
  • siempre estará la palabra "Calle" y/o "Avenida" y/o "Jirón", con/sin sus abreviaciones? – fredyfx Jul 24 '17 at 17:38
  • la idea es sólo poner la calle/Avenida/Jirón, así sin más, ya que, en el formulario se especifica a que corresponde cada campo. (no me había percatado de que tenía que realizar esa excepción, la haré ahora mismo) – L. Ronquillo Jul 24 '17 at 17:43

2 Answers2

6

Siempre prefiero el uso de REGEX, pero otra opción valida es definir el separador como " Y " (ya que comentas: "en algunos registros, la letra "y" puede existir como nombre de alguno de los dos cruzamientos"), de esta forma obtendrías los valores requeridos.

  String string = "19 Y 19-A";
  String[] parts = string.split(" Y ");
  String part1 = parts[0]; //obtiene: 19
  String part2 = parts[1]; //obtiene: 19-A
Jorgesys
  • 103,630
  • 13
  • 52
  • 124
  • Lo malo será las calles como "Calle Ramón y Cajal" – lois6b Jul 24 '17 at 18:02
  • En este caso si el carácter "y" es minúscula no habría problema. @lois6b , por ejemplo: "Calle Ramon y Cajal 19 Y 19-A" , se obtendría part1) Calle Ramon y Cajal 19 part2) 19-A – Jorgesys Jul 24 '17 at 18:05
  • ya... Aun así no sabemos todas las entradas que puede recibir.. Igual alguna si es en mayúsculas. No creo que se pueda hacer algo 100% eficaz – lois6b Jul 24 '17 at 18:07
  • 1
    @lois6b exacto :/ – Jorgesys Jul 24 '17 at 18:08
  • 1
    gracias por la ayuda @jorgesys. ya quedó, ahora creo que tengo que hablar con el que diseñó la base de datos.... xD – L. Ronquillo Jul 24 '17 at 18:55
  • 1
    Haha! , en este caso es importante definir y validar los datos que se almacenaran en la bd. Recuerdo casos de telefonos donde todos agregaban como se les ocurria su telefono y no se tenia un validador de formato.... incluso podian escribir el texto del numero telefonico – Jorgesys Jul 24 '17 at 18:58
  • en la empresa donde estoy, no se quién les hizo el programa, pero esta hecho un asco, llevo semanas validando jajaja – L. Ronquillo Jul 25 '17 at 21:24
2

Prueba con:

String[] parts = string.split("(?i)\\s+Y\\s+");

Explicación de la expresión regular:

NODO              EXPLICACIÓN
-----------------------------------------------------------------------
  (?i)            establece banderas (case-insensitive)
-----------------------------------------------------------------------
  \s+             espacio en blanco (\n, \r, \t, \f, y " ") (1 o
                  más veces (encontrando la mayor cantidad posible))
-----------------------------------------------------------------------
  Y               'Y'
-----------------------------------------------------------------------
  \s+             espacio en blanco (\n, \r, \t, \f, y " ") (1 o
                  más veces (encontrando la mayor cantidad posible))
Paul Vargas
  • 181
  • 1
  • 20
  • 39