使用 Char[] 数组有效地覆盖 toString

Override toString efficiently with Char[] Array

我正在创建一个 class,其中一个 char[] 数组作为唯一的实例变量。我必须使用构造函数和访问器方法等,但困难的部分是创建一个有效的 toString() 方法。

现在,我已将数组初始化为: private char[] tune = new char[5];

我的 toString() 方法如下所示:

public String toString() {
        return notes[0] + " " + notes[1] + " " + notes[2] + " " + notes[3] + " " + notes[4];
    }

我的问题是:有没有更有效的打印方法。我想到了使用for循环,如下图:

for(int i = 0; i <= tune.length; i++) {
            return tune[i] + " ";
        }

但我认为这会 return 调整 [0] 并停止。

数组已经内置了打印整个数组的方法。 (ArrayLists 不是这种情况)。

如果您查看 documentation 中的数组,您可以看到有一个名为 Arrays.toString()

的函数

这是一个如何使用它的例子。 String[] array = new String[] {"a","b","c"};

// Print out the Array
System.out.println(Arrays.toString(array));

// Output
[a,b,c]

如果您想打印出从索引a到索引b的数组,那么使用for...循环会更好。

如果要覆盖 toString() 方法,请使用在循环外初始化的 StringBuilder

public String toString() {
  StringBuilder sb = new StringBuilder();
  for (char ch : array) { // you used both notes and tune arrays in your examples,
  // so I'm just going to use "array" as the variable name as an example
    sb.append(ch);
    sb.append(" ");
  }
  return sb.toString();
}

请注意,这会在最后导致额外的 space,如果不需要,请改用:

public String toString() {
  StringBuilder sb = new StringBuilder();
  for (int i = 0; i < array.length - 1; i++) { // adds a space after every element
  // except for the last one, hence "i < array.length - 1"
    sb.append(array[i] + " ");
  }
  sb.append(array[array.length - 1]); // adds only the last element and no space
  // after
  return sb.toString();
}

希望这很容易理解!

注意 - Java 已经可以将 char[] 转换为字符串,但我假设您想更改它的转换方式。