大写不同颜色的句子中的颜色词

时间:2018-09-13 04:51:33

标签: java string colors

默认情况下,我尝试为从聊天包蓝色发送的所有单词涂上颜色,但是如果该单词(第一个单词除外)中的任何一个单词是大写字母(仅单词的第一个字母),我想要为其着色石灰绿色。我是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 :(得分:1)

替换

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>");
    }
}

答案 1 :(得分:0)

您是乞讨者,但下次请您花一些时间解释您的目标...

以下代码将以大写字母开头的单词选择第一种颜色,将所有其他单词选择第二种颜色

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,这将起作用...

无论如何,我强烈建议在跳入复杂事物之前先开始基础知识...

答案 2 :(得分:0)

不确定您要在此处做什么,但是分配给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之后,结果是意外的。您无需告诉我们任何颜色。您只是在操作String,而String操作无法按预期方式工作。通过简化方案,您可以提供MVCE,使人们更容易理解您的问题(因此,可以提供帮助)