es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Valor de cadena separado por dos puntos para varias líneas.

Quiero separar una cadena por dos puntos y almacenarla en un par clave-valor en un mapa, a continuación se muestra el valor de la cadena:

String s = "1: AFXSD                                        \n" +
    "   2: TNBLO                                                \n" +
    "  13: ONHDSAD                                                 \n" +
    "  51: NONREF                                                           \n" +
    "  25: 213213234                                                    \n" +
    " 32: ASD3123,01                                                    \n" +
    " 5: /ASDAS321                         abc      \n" +
    "      91360070 AVENIDA ENGENHEIRO ARY DE  ABREU LIMA N 900 PORTO ALEGRE\n" +
    "      BRASIL                                                           \n" +
    " 52A: ASDSADDASSA                                                      ";

He intentado dividirlo mediante el método split con dos puntos, pero no puedo unirlo si el valor está en varias filas, en dos puntos 5: tiene valor en varias filas, por lo que necesito agregar todos los valores en el valor de clave 5 con múltiples líneas como se muestra en el formato, los dos puntos 5: no deben estar en una sola línea.

El código que he intentado.

Aquí la cadena s proviene de ma.getText(row, 2).trim()

“`java
int row = 11;
String a = "";
String b = "";
Map<string, string=""> mp1 = new LinkedHashMap<>();
ArrayList<string> al = new ArrayList<>();
StringBuilder sb = new StringBuilder();
int c = 0;

while(!ma.getText(row, 2).trim().equals("")) {
String s = ma.getText(row, 2).trim();
if (s.contains(":")) {
a = s.split(":")[0];
b = s.split(":")[1];
// mp1.put(s.split(":")[0], s.split(":")[1]);
al.add(s);
c++;
} else {
sb.append(al.get(c)).append(s);
al.add(sb.toString());
sb = null;
}
mp1.put(a, b);
row++;
}
“`</string,>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para separar la cadena dada por dos puntos y almacenarlos en pares clave-valor en un mapa, podemos seguir los siguientes pasos:

    1. Declarar una variable de tipo cadena para almacenar la clave actual (inicialmente establecida como una cadena vacía).
    2. Declarar una variable de tipo mapa para almacenar los pares clave-valor.
    3. Declarar un array de cadenas para almacenar las líneas de la cadena dada (divididas por el carácter de nueva línea).
    4. Recorrer cada línea del array de cadenas.
    5. Si la línea contiene dos puntos, actualizar la variable de clave actual y agregar un nuevo par clave-valor al mapa.
    6. Si la línea no contiene dos puntos, agregar la línea al valor anterior de la clave actual en el mapa.
    7. Devolver la variable de mapa.

    Aquí está la implementación del código Java de los pasos anteriores:

    public static Map<string, string=""> separateStringByKeyValue(String s) {
        String currentKey = "";
        Map<string, string=""> keyValueMap = new LinkedHashMap<>();
        String[] lines = s.split("\\n");
    
        for (String line : lines) {
            if (line.contains(":")) {
                String[] parts = line.trim().split(":");
                String key = parts[0].trim();
                String value = parts[1].trim();
                currentKey = key;
                keyValueMap.put(key, value);
            } else {
                String currentValue = keyValueMap.get(currentKey);
                String newValue = currentValue + System.lineSeparator() + line.trim();
                keyValueMap.put(currentKey, newValue);
            }
        }
    
        return keyValueMap;
    }
    

    Podemos llamar a este método como separateStringByKeyValue(s) y pasar la cadena dada s como parámetro para obtener el mapa resultante con los pares clave-valor.</string,></string,>

Comments are closed.