0

我有一段代码,其中有一个以args[]. args将包含诸如["Hello", "guys"].

我需要使用 sendMessage 方法在游戏中显示聊天,并且我试图从我的数组中创建一个常规字符串,而在聊天中发送的是一个 '[Ljava.lang.String;@' 消息。

String Msg = new String (args.toString());

OnlinePlayers.sendMessage(ChatColor.GREEN + Player.getName() + ": " + Msg);

您知道我如何更改此代码,以便将数组中的文本放入一个字符串中并打印为单词,而不是一种没人理解的奇怪格式吗?

======

新版本

String NewMsg = null;

String Msg = java.util.Arrays.toString(args);

for( int i = 0; i <= Msg.length() - 1; i++) {

    NewMsg = (args[i] + " ");

}

OnlinePlayers.sendMessage(ChatColor.GREEN + Player.getName() + ": " + NewMsg);

我现在只是得到错误,它根本不工作。我认为这会从“Msg.length()”中获取单独单词的数量,然后遍历 for 循环并在每个循环的“NewMsg”字符串中添加一个单词和一个空格。

4

1 回答 1

5

我有一段代码,我认为它是以 args [] 的形式传递给它的数组列表。

不,您根本不是在处理 ArrayList,而是在处理数组。这String[] args就是宣称的和事实上的。

我需要使用 sendMessage 方法在游戏中显示聊天,并且我试图从我的数组列表中创建一个常规字符串,而在聊天中发送的是一个 '[Ljava.lang.String;@' 消息。

toString()当您调用String 数组时,您看到的是预期的结果。不要这样做。使用java.util.Arrays.toString(myArray)或循环遍历数组,从循环内部从数组中提取您遇到的每个字符串项。

例如,

String msg = java.util.Arrays.toString(args);
OnlinePlayers.sendMessage(ChatColor.GREEN + Player.getName() + ": " + msg);

顺便说一句,请学习和使用 Java 命名约定。变量名应以小写字母开头,类、接口和枚举应以大写字母开头。这将有助于防止混淆您的代码。

字符串消息 = 新字符串 (args.toString());

除了第 2 点,new String(...)除非你有充分的理由,否则不要使用。这将防止 Java 使用字符串池中已经存在的字符串,从而使堆中出现不必要的对象。只需要一个简单foo.toString()的来代替new String(foo.toString()).


编辑关于:

String NewMsg = null;

String Msg = java.util.Arrays.toString(args);

for( int i = 0; i <= Msg.length() - 1; i++) {

    NewMsg = (args[i] + " ");

}

不,你会想要使用java.util.Arrays.toString(...) or循环,而不是两者。如果您使用 for 循环,您的数组需要保留一个数组。另外,作为 for 循环的最大索引计数的 Msg 字符串的长度有什么好处?

相反,您的逻辑应该是(伪代码)

Declare a String variable, msg. Assign "" to it.
For int variable i goes from 0 to less than the length of the args array
  concatenate the i'th args item to the msg String.
use your msg String as needed.
于 2013-08-26T22:49:39.193 回答