TransWikia.com

Extraer partes especificas de un String

Stack Overflow en español Asked by JP711 on November 10, 2021

Tengo un String llamado "frase" que va a contener cantidades de un producto y quiero extraer lo siguiente:

  1. Número antes de palabra "kilos"
  2. Número antes de palabra "gramos"
  3. Palabra después de palabra "de"

Por ejemplo:
frase = "2 kilos 350 gramos de Huevo"

Quiero obtener 3 string con lo siguiente:

String kilos = "2";
String gramos = "350";
String producto = "Huevo";

Se que con contains puedo verificar si contiene las palabras (kilos, gramos, producto) pero como obtengo el texto o numero posterior o anterior a dichas palabras?

EDICIÓN

El String no siempre tiene la misma estructura, es decir puede no haber producto o puede no haber kilos, o incluso pueden haber palabras adicionales, un ejemplo:

frase = "calcular precio 200 gramos de aguacate"

En este caso la salida es:

kilos = "";
gramos = "200";
producto= "aguacate";

2 Answers

Te doy otra manera de hacerlo que para mi gusto no es nada elegante pero quizas te pueda ayudar en que encuentres lo que en relidad necesitas.

final String phrase = "2 kilos 350 gramos de Huevo";

String kilos = "";
String gramos = "";
String producto = "";

Pattern p = Pattern.compile("\S+(\s\S+)?");
Matcher m = p.matcher(phrase);

while (m.find()){
  if(m.group().toLowerCase().contains("kilos")) {
    kilos =  m.group().split(" ")[0];
  }else if (m.group().toLowerCase().contains("gramos")){
    gramos =  m.group().split(" ")[0];
  }else if(m.group().toLowerCase().contains("de")){
    producto = m.group().split(" ")[1];
  }
}

System.out.println("Kilos   : " + kilos);
System.out.println("Gramos  : " + gramos);
System.out.println("Producto: " + producto);

Answered by Cesar Salas on November 10, 2021

Puedes hacer eso con una expresión regular:

final Pattern rx = Pattern.compile("(\d+) kilos (\d+) gramos de (\w+)");
final String phrase = "2 kilos 350 gramos de Huevo";
final Matcher matcher = rx.matcher(phrase);
if (matcher.matches()) {
    System.out.println("Kilos   : " + matcher.group(1));
    System.out.println("Gramos  : " + matcher.group(2));
    System.out.println("Producto: " + matcher.group(3));
}

Produce:

Kilos   : 2
Gramos  : 350
Producto: Huevo

Answered by andreoss on November 10, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP