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.

Java: leer argumentos con “*”

Necesito hacer un programa que obtenga argumentos opcionales desde la línea de comando. En caso de que se muestre la bandera -regex, necesito leer la siguiente expresión regular y guardarla en el programa como una cadena. Algo como: java Main -regex *.java

Lo que tengo ahora se ve así:

public static void main(String[] args) 
...
if (args[i].equals("-regex")) {
   String myRegex = args[i+1];
   System.out.println(myRegex);
   i++;
   i++;

<p>}
...

Pero, como ejecuto el programa desde la carpeta donde hay algunos archivos como file1.java y file2.java, el programa imprime “file1.java”. ¿Qué puedo hacer para obtener mi variable con “*.java”?

Cuando intenté imprimir todos los argumentos, con:

for (String arg:args) {
System.out.println(arg);
}

me da:

-regex
file1.java
file2.java

Lo cual me lleva a la conclusión de que necesito leer los argumentos de manera diferente…

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para leer adecuadamente el argumento de la expresión regular, puedes modificar tu código para usar el índice del array args en lugar de usar explícitamente el índice i+1. Aquí tienes una versión actualizada de tu código:

    public static void main(String[] args) {
        String myRegex = null;
        for (int i = 0; i < args.length; i++) {
            if (args[i].equals("-regex") && i+1 < args.length) {
                myRegex = args[i+1];
                break;
            }
        }
        if (myRegex == null) {
            System.out.println("No se proporcionó ningún argumento de expresión regular.");
        } else {
            System.out.println("Expresión regular: " + myRegex);
        }
    }
    

    Este código itera sobre todos los argumentos en args, verificando si el argumento actual es -regex. Si lo es, verifica si existe el siguiente argumento (i+1 < args.length) y lo asigna a myRegex. Si no se proporciona el argumento de la expresión regular, el código mostrará un mensaje informando al usuario.

    Ten en cuenta que este código asume que el argumento de la expresión regular siempre se proporcionará después de la bandera -regex. Si necesitas admitir una sintaxis de línea de comandos más flexible, es posible que necesites usar una biblioteca más avanzada para el análisis de argumentos, como Apache Commons CLI.

Comments are closed.