¿Programa Java para expandir una string si se da el rango?

Supongamos que hemos dado una string en la que se especifican algunos rangos y tenemos que colocar los números que se encuentran entre el rango dado en el lugar especificado como se proporciona y se muestra en la siguiente ilustración para una mejor comprensión.

Ilustración: 

Input  : string x = "1-5, 8, 11-14, 18, 20, 26-29" 
Output : string y = "1, 2, 3, 4, 5, 8, 11, 12, 
                    13, 14, 18, 20, 26, 27, 28, 29"

Acercarse: 

Para resolver el problema anterior, podemos seguir el siguiente enfoque: 

  • Primero, tenemos que dividir la string en la array String[]. Tenemos que dividir la string donde encontramos el símbolo.
  • Ahora tenemos una array String[] con los elementos. Ahora simplemente vamos al último elemento del primer índice, es decir, 1 y el primer elemento del índice anterior de la array String[] dice que es 5.
  • Después de eso, con la ayuda de for loop, podemos agregar los números que están entre 1 y 5 y almacenarlos en la variable String.
  • El proceso anterior continúa hasta la longitud de la array de strings.

Nota: 

Con la ayuda de Colecciones y varios métodos de utilidad, podemos resolver el problema fácilmente, pero el concepto de Colecciones no es una buena opción en cuanto al rendimiento. Si pasamos por Colecciones, el rendimiento se reduce y también aumenta la complejidad del tiempo. Allí, en el siguiente programa, definimos explícitamente nuestro propio método y lógica de división.

Implementación: aquí ahora propondremos y discutiremos los tres escenarios con la ayuda de un programa java limpio de la siguiente manera:

Ejemplo 1:

Java

// Java program to Expand a String if Range is Given
 
// Main class
public class Solution {
 
    // Main driver method
    public static void expand(String word)
    {
 
        // Creating an object of StringBuffer class to
        // make a modifiable string object
        StringBuilder sb = new StringBuilder();
 
        // Get all intervals
        String[] strArr = word.split(", ");
 
        // Traverse through every interval
        for (int i = 0; i < strArr.length; i++) {
 
            // Get lower and upper
            String[] a = strArr[i].split("-");
 
            // Setting high and low counters
            if (a.length == 2) {
 
                int low = Integer.parseInt(a[0]);
                int high
                    = Integer.parseInt(a[a.length - 1]);
 
                // Condition check holds true
                // Till low counter is lesser or equal to
                // high counter
                while (low <= high) {
 
                    // Append all numbers
                    sb.append(low + " ");
                    low++;
                }
            }
 
            // If we reaches here then
            // High counter exceeds lower counter
            else {
 
                sb.append(strArr[i] + " ");
            }
        }
 
        // Print the modifiable string
        System.out.println(sb.toString());
    }
 
    // Method 2
    // Main driver method
    public static void main(String args[])
    {
        // Custom input string as input
        String s = "1-5, 8, 11-14, 18, 20, 26-29";
        expand(s);
    }
}
Producción: 

1 2 3 4 5 8 11 12 13 14 18 20 26 27 28 29

 

Ejemplo 2:

Java

// Java Program to Illustrate Expansion of String
 
// Main class
public class StringExpand {
 
    // Method 1
    // To split the string
    static String[] split(String st)
    {
        // Count how many words in our string
        // Irrespective of spaces
        int wc = countWords(st);
        String w[] = new String[wc];
        char[] c = st.toCharArray();
        int k = 0;
 
        for (int i = 0; i < c.length; i++) {
 
            // Initially declaring and initializing
            // string as empty
            String s = "";
 
            // Whenever we found an non-space character
            while (i < c.length && c[i] != ' ') {
 
                // Concat with the String s
                // Increment the value of i
                s = s + c[i];
                i++;
            }
 
            // If the String is not empty
            if (s.length() != 0) {
 
                // Add the String to the String[]
                // array
                w[k] = s;
                k++;
            }
        }
 
        // Returning the string array
        return w;
    }
 
    // Method 2
    // To count the number of words in a string
    static int countWords(String str)
    {
        int count = 0;
        for (int i = 0; i < str.length(); i++) {
 
            // The below condition to check
            // whether the first character is
            // space or not
            if (i == 0 && str.charAt(i) != ' '
                || str.charAt(i) != ' '
                       && str.charAt(i - 1) == ' ') {
                count++;
            }
        }
 
        // Returning the count
        return count;
    }
 
    // Method 3
    // To expand the string
    public static void expand(String s)
    {
        String p = s;
        String[] arr = p.split("\\-");
        String k = "";
 
        // Traversing over array using for loop
        for (int i = 0; i < arr.length; i++) {
 
            // Case 1
            if (i != arr.length - 1) {
 
                String[] arr1 = arr[i].split(", ");
                String[] arr2 = arr[i + 1].split(", ");
 
                int a = Integer.parseInt(
                    arr1[arr1.length - 1]);
                int b = Integer.parseInt(arr2[0]);
 
                for (int j = a + 1; j < b; j++) {
                    arr[i] = arr[i] + ", " + j;
                }
            }
 
            // Case 2
            if (k != "")
                k = k + ", " + arr[i];
 
            // Case 3
            else
                k = k + arr[i];
        }
 
        // Print the expanded string
        System.out.println(k);
    }
 
    // Method 4
    // Main driver method
    public static void main(String[] args)
    {
        // Custom string input
        String s = "1-5, 8, 11-14, 18, 20, 26-29";
 
        // Calling the method 3 to
        // expand the string
        expand(s);
    }
}
Producción: 

1, 2, 3, 4, 5, 8, 11, 12, 13, 14, 18, 20, 26, 27, 28, 29

 

Ejemplo 3:

Java

// Java program to Expand a String if Range is Given
 
// Main class
// GenerateStringOnRange
class GFG {
 
    // Method 1
    // To generate string on range
    public static String generateStringOn(String input)
    {
        String[] words = input.split(" ");
 
        // Initially setting up range
        String[] ranges = null;
        int number = 0;
 
        // Creating a StringBuffer object so that
        // we can modify the string
        StringBuffer buffer = new StringBuffer();
 
        // Looking out for words by
        // iterating using for each loop
        for (String word : words) {
             
            // To be replaced by
            // using replace() method
            word = word.replace(",", "");
 
            // If word is containing "-" character
            if (word.contains("-")) {
                ranges = word.split("-");
                number = Integer.parseInt(ranges[0]);
 
                // Till number is within range
                while (number
                       <= Integer.parseInt(ranges[1])) {
                     
                    // Append , in between them
                    buffer.append(number + ", ");
                    number++;
                }
            }
 
            // If we reaches here then
            // word does contains "-"
            else {
                buffer.append(word + ", ");
            }
        }
 
        // Return the StringBuffer object
        return buffer.toString();
    }
 
    // Method 2
    // Main driver method
    public static void main(String[] args)
    {
        // Custom input string
        String input = "1-5, 8, 11-14, 18, 20, 26-29";
 
        // Calling the method 1 as created above
        System.out.println(generateStringOn(input));
    }
}
Producción

1, 2, 3, 4, 5, 8, 11, 12, 13, 14, 18, 20, 26, 27, 28, 29, 

Publicación traducida automáticamente

Artículo escrito por Bishal Kumar Dubey y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *