Цветные слова в предложении, которые являются заглавными, другого цвета - PullRequest
0 голосов
/ 13 сентября 2018

Я пытаюсь закрасить все слова, отправленные из моего пакета чата синий по умолчанию, но если в предложении (кроме первой буквы) есть любое слово в верхнем регистре (только первая буква слова), я бы нравится красить его зеленый лайм . Я начинающий с Java, но это то, что я придумал до сих пор. Проблема заключается в том, что он по-прежнему устанавливает цвет любого слова синим независимо от того, является ли он заглавным или нет.

public void sendChatPacket(String s, int id) {
    boolean isUpperCase = Character.isUpperCase(s.length());
    s = isUpperCase ? "<col=65280>\" + s + \"</col>" : "<col=255>\" + s + \"</col>";
}

public void showInformation(Player player) {
    sendChatPacket("I can start this quest by speaking to Hetty", 8147);
    sendChatPacket("who is in Rimmington.", 8148);
}

Любая помощь приветствуется, спасибо!

Ответы [ 3 ]

0 голосов
/ 13 сентября 2018

Вы начинающий, но, пожалуйста, в следующий раз, когда вы попросите что-нибудь, объясните свою цель дольше ...

следующий код выберет первый цвет для слов, начинающихся с заглавной буквы, второй цвет для всех остальных слов

if (s != null && s.length() > 0) {
            StringBuilder result = new StringBuilder(s.length() * 2);
            result.append("<col=255>");
            String[] split = s.split(" ");
            for (String t : split) {
                boolean isUpperCase = Character.isUpperCase(t.charAt(0));
                if (isUpperCase)
                    result.append("<col=65280> " + t + "</col>");
                else
                    result.append(" "+t);
            }
            result.append("</col>");
            s = result.toString();
        }

если вы печатаете чистый HTML, это сработает ...

В любом случае, я настоятельно рекомендую начать с основ, прежде чем переходить к сложным вещам ...

0 голосов
/ 13 сентября 2018

Не уверен, что вы пытаетесь сделать здесь, но то, что вы назначаете для s, не будет действовать для вызывающей стороны:

public void sendChatPacket(String s, int id) {
    boolean isUpperCase = Character.isUpperCase(s.length());
    s = isUpperCase ? "<col=65280>\" + s + \"</col>" : "<col=255>\" + s + \"</col>";
}

Параметр метода передается по значению в Java. Даже если вы присваиваете s чему-то другому, аргумент, переданный вызывающей стороной, не будет затронут.

В вашем звонящем вы ничего не делаете с сообщением, которое вы передали. Так что ваш код просто не делает ничего осмысленного.

Если это не ваш реальный код, предложите код, который демонстрирует проблему. Сообщите нам, каков ожидаемый результат и как ваш пример кода не соответствует вашим ожиданиям.


В следующий раз, когда вы спросите: небольшая рекомендация: вы даете здесь слишком много неуместного контекста. Например, в этом вопросе вы должны были самостоятельно поставить диагноз и обнаружить, что после вызова sendChatPacket результат неожиданный. Вам не нужно говорить нам, какой окрас. Вы просто манипулируете строкой, а манипулирование строкой не работает должным образом. Упрощая сценарий, вы могли бы предоставить MVCE, который намного облегчит людям понимание вашей проблемы (следовательно, предложит помощь)

0 голосов
/ 13 сентября 2018

Заменить

boolean isUpperCase = Character.isUpperCase(s.length());

на

boolean isUpperCase = s.toUpperCase().equals(s);

Проблема в том, что вы проверяете, является ли длина строки (котораяявляется числом) является заглавной.

Кроме того, вы переназначаете s в последней строке метода.Это не изменит исходную строку.Подробнее см. https://stackoverflow.com/a/40523/1039555.

Редактировать на основе новой информации в комментариях: -

String[] words = s.split("\\s+");
for (String word : words) {
    if (Character.isUpperCase(word.charAt(0))) {
        s = s.replace(word, "<col=65280>" + word + "</col>");
    } else {
        s = s.replace(word, "<col=255>" + word + "</col>");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...