如何删除数组中的最后一个逗号和空格? Java [重复]

Posted

技术标签:

【中文标题】如何删除数组中的最后一个逗号和空格? Java [重复]【英文标题】:How to remove last comma and space in array? Java [duplicate] 【发布时间】: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 【参考方案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[]) . 看看Arrays.asList() not working as it should?,特别是这个答案:***.com/a/1467940/1393766 必须打开一个IDE来修复它!呵呵。修改! :) 谢谢!

以上是关于如何删除数组中的最后一个逗号和空格? Java [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何删除最后一个字符(从数组创建字符串时的逗号)? [复制]

Java如何将拼接字符串中的最后一个逗号去掉

从列中删除逗号,空格和“NULL”字符串为0(零)

jQuery从数组中删除最后一个逗号

删除重复的单词、逗号和空格

拼接字符串时,去掉最后一个多余的逗号