默认情况下,我尝试为从聊天包蓝色发送的所有单词涂上颜色,但是如果该单词(第一个单词除外)中的任何一个单词是大写字母(仅单词的第一个字母),我想要为其着色石灰绿色。我是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);
}
感谢您的帮助,谢谢!
答案 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,使人们更容易理解您的问题(因此,可以提供帮助)