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

Java 句子中大写不同颜色的单词,java,string,colors,Java,String,Colors,默认情况下,我试图将聊天包中发送的所有单词涂成蓝色,但如果句子中有大写的单词(只有单词的第一个字母)(第一个单词除外),我希望将其涂成浅绿色。我是java的初学者,但到目前为止我已经想到了这一点。问题是它仍然在设置任何单词蓝色的颜色,不管它是否为大写 public void sendChatPacket(String s, int id) { boolean isUpperCase = Character.isUpperCase(s.length()); s = isUpperC

默认情况下,我试图将聊天包中发送的所有单词涂成蓝色,但如果句子中有大写的单词(只有单词的第一个字母)(第一个单词除外),我希望将其涂成浅绿色。我是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);
}
public void sendChatPacket(字符串s,int-id){
布尔值isUpperCase=Character.isUpperCase(s.length());
s=大写“\”+s+\”:“\”+s+\”;
}
公开无效显示信息(玩家){
SendChatpack(“我可以通过和Hetty说话开始这个任务”,8147);
Sendchatpack(“谁在里明顿。”,8148);
}
非常感谢您的帮助,谢谢

更换

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

boolean isUpperCase=s.toUpperCase().equals

问题是您正在检查字符串的长度(是一个数字)是否为大写

另外,您正在方法的最后一行重新分配
s
。这不会更改原始字符串。有关更多详细信息,请参阅

根据评论中的新信息编辑:-

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>");
    }
}
String[]words=s.split(\\s+);
for(字符串字:字){
if(Character.isUpperCase(word.charAt(0))){
s=s。替换(单词“+”);
}否则{
s=s。替换(单词“+”);
}
}

你是乞丐,但下次你问什么问题时,请花更长的时间解释你的目标

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

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();
        }
if(s!=null&&s.length()>0){
StringBuilder结果=新的StringBuilder(s.length()*2);
结果。追加(“”);
字符串[]split=s.split(“”);
for(字符串t:拆分){
布尔值isUpperCase=Character.isUpperCase(t.charAt(0));
if(大写)
结果。追加(“+t+”);
其他的
结果.追加(“+t”);
}
结果。追加(“”);
s=result.toString();
}
如果您正在打印纯html,这将起作用


无论如何,我强烈建议在开始复杂的事情之前先从基础开始…

不确定您在这里要做什么,但您分配给
s
的任何内容都不会对调用方产生影响:

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 sendChatPacket(字符串s,int-id){
布尔值isUpperCase=Character.isUpperCase(s.length());
s=大写“\”+s+\”:“\”+s+\”;
}
方法参数在Java中按值传递。即使将
s
赋值给其他对象,调用方传递的参数也不会受到影响

在呼叫者中,您也没有对传入的消息执行任何操作。因此,您的代码没有做任何有意义的事情

如果不是您的真实代码,请提供演示问题的代码。告诉我们预期的结果是什么,以及您的示例代码如何无法满足您的预期



下次你问的时候有一点建议:你在这里给出了太多不相关的上下文。例如,在这个问题中,您应该自己进行诊断,并且应该发现在调用
sendChatPacket
后,结果是意外的。你不需要告诉我们什么颜色。您只是在操作一个字符串,而字符串操作没有按预期工作。通过简化场景,您可以提供一个MVCE,使人们更容易理解您的问题(因此,提供帮助)

以前从未听说过
ActionSender
类。我也不明白这些随意的数字在HTML风格的语法中意味着什么。也许它们缺少引号?我想你应该阅读Javadocs-这个方法的参数(int)应该是unicode字符可能使用正则表达式来确定是否存在任何大写字符…此外,你的文本说
任何单词
都是大写的,那么你为什么要测试一个
char
——另请看我是java初学者,我道歉。动作发送者是发生这种情况的类,但我已编辑为void以避免任何混淆。这些数字是html颜色代码,但其他都是java。您好,谢谢您的快速响应。我已经试过了,但在加载应用程序时,所有的单词仍然是蓝色的。我想让海蒂和林明顿这两个字变成青柠色。(这只是一个例子,但我希望它能够自动用于任何未来的大写单词,而不仅仅是这两个单词)我正在尝试让单词Hetty和Rimmington变为浅绿色,你想检查
Character.isUpperCase(s.charAt(0))这个单词不是大写的,只有第一个字符被(编辑)修复了我的错误,但它似乎把所有的东西都涂成了浅绿色。try
boolean isUpperCase=s!=空&!s、 isEmpty()&&Character.isUpperCase(s.charAt(0))谢谢你,卡蒂克,不再有错误,但现在一切都是青灰色的。对于这句话,我只想用灰绿色的Hetty这个词。现在是什么样子的图片:我试图让一切都变成蓝色,然后是单词Hetty lime green,因为它是大写的。很抱歉,我只是试图给出上下文,我试图给一些单词涂上蓝色和大写字母lime green。在Java字符串中没有“color”这个词。您只是通过插入一些额外的“标记”(甚至不是HTML)来操作字符串。你不需要告诉我们你的屏幕上显示了什么(这可能是由于输入错误,或者你的屏幕逻辑完全错误造成的),你只需要告诉我们你对字符串操作函数的期望