[Ljava.lang.String; @输出错误

时间:2013-08-26 22:48:31

标签: java type-conversion

我有一段代码,它以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'字符串添加一个单词加空格。

1 个答案:

答案 0 :(得分:5)

  

我有一段代码,我认为这是一个以args []形式传递给它的arraylist。

不,你除了数组之外根本不处理ArrayList。这就是String[] args被宣布为什么以及它实际上是什么。

  

我需要使用sendMessage方法来显示游戏中的聊天以及我试图从我的arraylist创建常规字符串的位置,聊天中发送的内容是'[Ljava.lang.String; @'消息。

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

如,

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

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

  

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

除了2号之外,请不要使用new String(...),除非您有充分的理由这样做。这将阻止Java使用String池中已有的String,使用不必要的对象混乱堆。只需要一个简单的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(...) a for循环,而不是两者。如果使用for循环,则数组需要保留数组。另外,Msg String的长度与for循环的最大索引计数有什么关系?

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

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.