【问题标题】:Can a Java List be output as a String?Java List 可以输出为字符串吗?
【发布时间】:2023-03-26 07:37:01
【问题描述】:

如果我想打印字符串“Output:”,然后是方法返回的任何结果,唯一会在与“Output:”相同的行上执行此操作的方法是返回 String 类型的方法。例如:

public static void main(String[] args){
  System.out.println(returnString("Hello"));
}

public static String returnString(String s){
    return "Output:" + s;
}

但是,如果我想打印字符串“Output:”,然后是任何其他变量类型的方法返回,则返回必须在单独的行上。例如:

public static void main(String[] args){
  System.out.println(returnInt(2));
}

 pubic static int returnInt(int n){
  System.out.println("Output:");
  return n;
}

或通过将返回类型更改为 String 并使用适合返回类型的内置转换方法。例如:

public static void main(String[] args){
  System.out.println(returnInt(2));
}

public static String returnInt(int n){
  return "Output:" + String.valueOf(n)
}

public static void main(String[] args){
  System.out.println(returnArray(new int[]{1, 2, 3}));
}

public static String returnArray(int[] array){
  return "Output:" + Arrays.toString(array);
}

public static void main(String[] args){
  System.out.println(returnBoolean(false));
}

 public static String returnBoolean(boolean b){
  return "Output:" + Boolean.toString(b);
}

所以三个问题:

1) 在初始化一个方法时,不能像声明两个输入类型(即 methodName(int n, String S))一样声明两个返回类型,对吗?

2) 在返回非字符串时,是否有任何方法(例如转义序列)将下一行拉到同一行?

2) 如果没有,是否有用于返回 List 的内置方法(Arrays.toString 或 String.value 的方式为它们各自的类型做些什么?我找不到类似的东西,例如 List.ToString 等.

【问题讨论】:

  • 您误解了输出和方法调用的结果(或返回值)。
  • 另外,查看字符串连接。
  • 只使用System.out.print而不使用ln
  • @Ingo。谢谢。那是简短而甜蜜的哈哈。所以没有办法允许顺序的两种返回类型或像Arrays.toString这样的List转换方法,对吗?
  • 按顺序返回两种类型是什么意思?

标签: java list


【解决方案1】:

1) 没错。不过,一个方法可以返回一个包含多种类型的实例变量的对象。

2) 如果你使用System.out.print() 而不是System.out.println() 它不会在末尾添加换行符。

3) This answer 提供了一种打印列表元素的简单方法。

System.out.println(Arrays.toString(stack.toArray()));

【讨论】:

    【解决方案2】:

    在java中你总是可以这样写:

    Object o = someMethod();
    System.out.println("Output: " + o);
    

    JVM 会隐式调用o.toString() 将其转换为字符串,然后将其附加到字符串'Output:'。

    【讨论】:

      【解决方案3】:

      1) 在初始化一个方法时,不能像声明两个输入类型(即 methodName(int n, String S))一样声明两个返回类型,对吗?

      正确,在 Java 中,如果你想返回多个东西,你应该创建一个对象来代表你返回的数据,然后返回它。因此,您不会返回爪子、头部、身体、腿和尾巴对象,而是返回 Dog

      2) 在返回非字符串时,是否有任何方法(例如转义序列)将下一行拉到同一行?

      你打赌,只是不要告诉它添加换行符。这就是println 为您所做的,它的意思是“打印线”。相反,只需使用print

      2) 如果没有,是否有用于返回 List 的内置方法(Arrays.toString 或 String.value 的方式为它们各自的类型做些什么?我找不到类似的东西,例如 List.ToString 等.

      大多数 List 实现都会有一个 toString 方法,所以你绝对可以打印出来,试试看。它可能不是您想要的,因此您可能必须编写一个辅助方法来按照您的意图对其进行格式化。

      【讨论】:

      • @Nick Veys 我试过了。这就是首先导致整个帖子的原因,哈哈。 List.toString() 和 ArrayList.toString() 都不起作用。 ArrayList.toString 错误,“AbstractCollection 类型中的 toString() 方法不适用于参数 (List)”,使用 List.toString() 错误,“Object 类型中的 toString() 方法不适用对于参数 (List)"
      • 不确定您到底做错了什么,但这里有一个打印列表的简单示例:pastebin.com/r8CtKTy4
      • 你真的在调用像List.toString(some_list)这样的方法吗?因为那行不通。 List是一个接口,不能直接在上面调用方法,toString其实是在对象本身上,强制转换成String时会自动调用。
      【解决方案4】:

      你做错了。

      如果我想打印字符串 "Output:" 后跟任何结果 方法返回,唯一会在同一行返回的方法 “Output:”是一个返回String类型的方法。

      绝对不是。

      采取这种方法

      public int returnAnInt() {
          return 42;
      }
      

      你可以像这样打印这个方法返回的值

      System.out.println("Output:" + /*possibleInstance.*/returnAnInt());
      

      这可能是由于String concatenation

      不要在编写方法时考虑到输出。例如,如果您有一个应该计算两个整数之和的方法

      public int add(int a, int b) {
          return a + b;
      }
      

      只要让它计算两个整数之和即可。

      无需将输出放入方法本身。使调用该方法的代码输出值

      int sum = add(16, 27);
      System.out.println("The sum is: " + sum);
      // or
      System.out.println("The sum is: " + add(16, 27));
      

      至于你的 3 个问题,我认为这变得相当有争议,请参阅其他答案。 You might want to look at the toString() method which all reference types inherit.

      【讨论】:

        【解决方案5】:
        public class tst
        {
            public static void main(String[] args)
            {
                System.out.println(toString(1));
                System.out.println(toString("hello"));
                System.out.println(toString(false));
                System.out.println(toString(new Integer[] { 1, 2, 3 }));
            }
        
            static String toString(Object object)
            {
                return "Output: (" + object.getClass().getSimpleName() + ") " + object;
            }
        }
        

        控制台输出为:

        Output: (Integer) 1
        Output: (String) hello
        Output: (Boolean) false
        Output: (Integer[]) [Ljava.lang.Integer;@51de8adb
        

        【讨论】:

        • 非常糟糕的解决方案。
        猜你喜欢
        • 2015-02-03
        • 2022-06-28
        • 2010-12-30
        • 2015-10-08
        • 2011-01-20
        • 2021-10-25
        • 2016-07-27
        • 1970-01-01
        • 2010-12-20
        相关资源
        最近更新 更多