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



默认情况下,我正在尝试将从聊天包发送的所有单词着色为蓝色,但如果句子中的任何单词是大写的(只是单词的第一个字母((第一个单词除外(,我想将其着色为柠檬绿色。我是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);
}

任何帮助不胜感激,谢谢!

替换

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

不确定您在这里要做什么,但您分配给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,使人们更容易理解您的问题(因此,提供帮助(

你很乞求,但请下次你问一些事情时花更长的时间解释你的目标......

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

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

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

最新更新