【问题标题】:How to remove last comma and space in array? Java [duplicate]如何删除数组中的最后一个逗号和空格? Java [重复]
【发布时间】:2017-09-08 21:20:51
【问题描述】:

伙计们,我想知道如何从数组中删除多余的逗号和空格?当我运行程序时,它给了我 {1, 2, 3, 4, 5, }。我想要的是 {1、2、3、4、5}。主要必须保持不变。 PrintArray 方法是我需要帮助的方法。

引用重复的问题陈述。 这是不同的,因为它要求用户输入一个数字并相应地打印数组。这不是重复的问题。

    public static void printArray(int[] myArray)
    {

        System.out.print("[");
        for(int i = 0; i < myArray.length; i++)
        {
            myArray[i] = i + 1;
            System.out.print(myArray[i] + ", ");
        }
        System.out.println("]");
    }
}

【问题讨论】:

  • 您可以打印除最后一个以外的所有元素,然后单独打印最后一个元素
  • 截断最后 3 个字符,然后附加“]”。或者更好的是,不要盲目附加", ",而是检查myArray 的长度和i 的值以确定是否需要附加", "
  • 我有时也会在StringBuilder 中构建输出,然后总是删除最后一个空格和逗号。 StringBuilder 只是底层的 char[],因此从末尾删除两个字符很容易。生成的代码也非常紧凑和高效。
  • 为了避免混淆,我建议你的printArray方法,只打印数组。让它也初始化数组是一些回答问题的人错过的令人困惑的并发症。你可以调用方法initialiseAndPrintArray

标签: java arrays for-loop


【解决方案1】:

首先不要打印它。仅在i &gt; 0 时打印字符串前的逗号。

public static void printArray(int[] myArray)
{

    System.out.print("[");
    for(int i = 0; i < myArray.length; i++)
    {
        myArray[i] = i + 1;
        if (i > 0)
        {
            System.out.print(", ");
        }
        System.out.print(myArray[i]);
    }
    System.out.println("]");
}

【讨论】:

    【解决方案2】:

    简单的方法就是使用Arrays.toString

    public static void printArray(int[] myArray)
    {
        System.out.print( Arrays.toString( myArray ) );
    }
    

    请注意,这将打印括号而不是大括号。为了完整起见,如果您自己实现了这个,除了长度 = 0 等其他边界条件之外,别忘了检查数组是否为 null

    这是一个使用StringBuilder 的示例,我总是在检查null 和长度= 0 后删除最后两个字符。如果您要为列表/数组中的每个项目计算一个非常复杂的字符串,这比复制代码使每个项目都在循环之外更容易,并且比每次通过循环检查i==array.length-1 稍微快一些。

    public class MyArraysToString
    {
    
       public static void main( String[] args )
       {
          int[] test = { 8, 7, 6, 5, 4, };
          printArray( test );
          System.out.println( myToString( null ) );
          System.out.println( myToString( new int[0] ) );
          System.out.println( myToString( test ) );
       }
    
       public static void printArray( int[] myArray )
       {
          System.out.println( Arrays.toString( myArray ) );
       }
    
       public static String myToString( int[] a ) {
          if( a == null ) return "null";
          if( a.length == 0 ) return "{}";
          StringBuilder sb = new StringBuilder();
          sb.append( '{' );
          for (int i = 0; i < a.length; i++) {
             sb.append( a[i] );
             sb.append( ", " );
          }
          sb.setLength( sb.length()-2 );
          sb.append( '}' );
          return sb.toString();
       }
    }
    

    【讨论】:

    • 注意;相当令人困惑的是,不仅打印数组 OP 的代码还初始化它。
    • 哦,OP的代码。是的,这有点奇怪。
    • 原始代码有myArray[i] = i + 1;,它将与您的代码做一些不同的事情。恕我直言,您的代码更有意义,只是没有做同样的事情。
    • 我认为这只是一个测试用例,因此他可以产生输出,但是是的,他可能也打算初始化数组,在这种情况下,他的问题与他的问题并不真正匹配。跨度>
    • 是的,对不起那些家伙,我删除了我的主要方法。我认为这会让事情更容易阅读。
    【解决方案3】:

    我会这样修改它(在下一个项目之前打印逗号,索引> 0)

    System.out.print("[");
    for(int i = 0; i < myArray.length; i++) {
      myArray[i] = i + 1;
      System.out.print(((i > 0) ? ", " : "") + myArray[i]);
    }
    System.out.print("]");
    

    或者,在 Java 8 中,

    System.out.println(
      "[" + 
      Arrays.stream(array)
          .mapToObj(String::valueOf)
          .collect(Collectors.joining(", "))
      + "]"
    );
    

    【讨论】:

    • Collections.asList 不适用于原始类型数组。您可能想改用Stream.ofArrays.stream
    • 对,我在打字的时候想到了Arrays.asList(没有Collections.asList这样的东西)。呵呵:)谢谢!修正。 :)
    • 实际上我也在考虑Arrays.asList,所以问题仍然存在。看一看。如果你有int[] array = {1,2} 并且你使用Arrays.asList 你会得到List&lt;int[]&gt; 它将包含一个元素,数组本身。你不会得到List&lt;int&gt;(因为泛型类型不能是原始类型)也不会得到List&lt;Integer&gt;(因为自动装箱仅适用于原始类型,但any数组不是原始类型,甚至int[]) .
    • 必须打开一个IDE来修复它!呵呵。修改! :) 谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多