Retrieve String between characters

3

Hello, I'm developing a program that uses the java command line if the user types: send -all < message to be sent > He sends the message to everyone. if it is send -by < user > < message to be sent > it sends to a specific user. These commands arrive in String, my question is how to retrieve this information and call the specific method, I tried with split, but I could not. The messages are between < >.

    
asked by anonymous 09.05.2015 / 00:44

1 answer

2

Considering the call:

java MeuPrograma -by<usuario> -<mensagem>

You can simply use the parameters sent to the main method:

public class ClasseQuePossuiMetodoPrincipal {
    public static void main(String... args) {
        System.out.println(args[0]); // Vai exibir -by<usuario>
        System.out.println(args[1]); // Vai exibir -<mensagem>
    }
}

Both are delivered to your application as a String , including the special characters you have sent. To remove them and have a more friendly string , you can do this:

public class ClasseQuePossuiMetodoPrincipal {
    public static void main(String... args) {
        System.out.println(clear(args[0])); // Vai exibir byusuario (pode usar um String#substring para remover o 'by' no início)
        System.out.println(clear(args[1])); // Vai exibir mensagem
    }

    private static String clear(String str){
        return str.replaceAll("[^\dA-Za-z ]", "");
    }
}


Suggestion for implementation

A better way to do this is by calling your Java application in the following ways:

When you want to send everyone: java MeuPrograma "Mensagem que será enviada a todos."
And when you want to send to a specific user: java MeuPrograma "Olá, como vai?" "foo"

This way, you can check the amount of arguments sent. If a single parameter is sent, we consider that the message should be delivered to all. Otherwise, sending two arguments means that the message should be sent to a specific user.

So your class could look like this:

public class ClasseQuePossuiMetodoPrincipal {
    public static void main(String... args) {
         //Faz aqui algum tratamento caso args.lenght seja zero.
         //E verifica se args.lenght é igual a 2.

        if(args.lenght == 1)
            send(args[0]); // Todos
        else 
            send(args[0], args[1]); // Envia para um usuário
    }

    private static void send(String message){
        // Envia para todos...
    }

    private static void send(String message, String who){
        // Envia para 'who'...
    }
}

Taking advantage of the same idea, if you want to allow the user to use the application by sending the message content followed by a user list to which the message should be sent, for example:

java MeuPrograma "Mensagem para os usuários a seguir..." "joao" "mario" "carlos"

Your class could be implemented like this:

import java.util.ArrayList;

public class ClasseQuePossuiMetodoPrincipal {
    public static void main(String... args) {
        //Faz aqui algum tratamento para verificar se args.lenght é igual ou maior que 1.
        String mensagem = args[0];

        if(args.length == 1)
            send(mensagem);

        else {
            ArrayList<String> usuarios = new ArrayList<>();

            // Começando em 1 pois 0 é a mensagem, já armazenada na variável 'mensagem'
            for(int i = 1; i < args.length; i++)
                usuarios.add(args[i]);
            send(mensagem, usuarios);
        }
    }

    private static void send(String message){
        // Envia para todos
    }

    private static void send(String message, ArrayList<String> sendTo){
        // Envia para todos os usuários na lista 'sendTo'
    }
}
    
09.05.2015 / 10:25