String replaceAll () метод replace, кроме строки - PullRequest
0 голосов
/ 21 мая 2018

Я пытаюсь использовать метод replaceAll(), чтобы заменить все в строке, кроме последовательности строк, но я не заставляю ее работать, у меня есть следующий код:

В основном:

String message = "§eTeste"

String color = message.replaceAll(?, ""); // The problem

System.out.println(color);

Выходные данные должны быть «§e»

Код:

        String[] args = message.split(" ");
        StringBuilder sb = new StringBuilder();

        for (int i = 0; i < args.length; i++) {
            String teste = args[i].replaceAll("§[0-9A-Fa-fK-Rk-r]", "");

            if (i == (args.length-1)) {
                if (teste.matches("http://" + "(.*)") || teste.matches("https://" + "(.*)")) {

                    String cor = "";
                    if (!args[i].matches("(.*)" + "§[0-9A-Fa-fK-Rk-r]" + "(.*)") && (sb.toString() !=null) && !sb.toString().isEmpty()) {
                        cor = sb.toString().replaceAll("[^(§[0-9A-Fa-fK-Rk-r])]", "");
                    }

                    if ((sb.toString() !=null) && !sb.toString().isEmpty()) {
                        JSONObject objeto = new JSONObject();

                        objeto.put("text", sb.toString());
                        jmessage.add(objeto);
                    }

                    JSONObject objeto = new JSONObject();
                    JSONObject extra = new JSONObject();

                    extra.put("action", "open_url");
                    extra.put("value", teste);

                    objeto.put("text", cor + args[i]);
                    objeto.put("clickEvent", extra);

                    jmessage.add(objeto);
                }
                else {
                    JSONObject objeto = new JSONObject();

                    sb.append(args[i]);

                    objeto.put("text", sb.toString());
                    jmessage.add(objeto);
                }
            }
            else {
                if (teste.matches("http://" + "(.*)") || teste.matches("https://" + "(.*)")) {

                    String cor = "";
                    if (args[i].matches("(.*)" + "§[0-9A-Fa-fK-Rk-r]" + "(.*)")) {
                        cor = args[i].replaceAll("[^(§[0-9A-Fa-fK-Rk-r])]", "");
                    }
                    else if (sb.toString() !=null) {
                        cor = sb.toString().replaceAll("[^(§[0-9A-Fa-fK-Rk-r])]", "");
                    }

                    if ((sb.toString() !=null) && !sb.toString().isEmpty()) {
                        JSONObject objeto = new JSONObject();

                        objeto.put("text", sb.toString());
                        jmessage.add(objeto);

                        sb = new StringBuilder();
                        sb.append(" " + cor);
                    }

                    JSONObject objeto = new JSONObject();
                    JSONObject extra = new JSONObject();

                    objeto.put("text", cor + args[i]);

                    extra.put("action", "open_url");
                    extra.put("value", teste);

                    objeto.put("clickEvent", extra);

                    jmessage.add(objeto);
                }
                else {
                    sb.append(args[i] + " ");
                }
            }
        }

jmessage - это JSONArray, созданный из сообщения, которое является строковым вводом, сделанным отправителем (игроком)./ console)

"§ [0-9A-Fa-fK-Rk-r]" представляет цвет сообщения, в этом методе я создаю JSONArray, в котором расположение ссылки имеет click_event (каждый раз, когда создается новый «текст», мне нужно отправить ему цвет курсора)

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

Я нашел решение ... метод replaceAll() не может разделять более 1 символа .. из-за этого я создал этот метод для решения проблемы:

private String findCor(String string) {
    char[] b = string.toCharArray();

    StringBuilder sb = new StringBuilder();
    sb.append("");

    for (int i = 0; i < (b.length-1); i++) {
        if ((b[i] == ChatColor.COLOR_CHAR) && ("0123456789AaBbCcDdEeFfKkLlMmNnOoRr".indexOf(b[(i + 1)]) > -1)) {
            sb.append(b[i]);
            sb.append(b[(i + 1)]);
        }
    }
    return sb.toString();
}
0 голосов
/ 21 мая 2018

Поскольку вы удаляете k-r в своем регулярном выражении в строке 5, буква p также удаляется, поскольку ее позиция в алфавите между k и r.Из-за этого вы никогда не найдете совпадения на «http» (teste.matches("http" ...) ниже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...