如何删除数组中的最后一个逗号和空格? 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 > 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.of
或Arrays.stream
。
对,我在打字的时候想到了Arrays.asList
(没有Collections.asList
这样的东西)。呵呵:)谢谢!修正。 :)
实际上我也在考虑Arrays.asList
,所以问题仍然存在。看一看。如果你有int[] array = 1,2
并且你使用Arrays.asList
你会得到List<int[]>
它将包含一个元素,数组本身。你不会得到List<int>
(因为泛型类型不能是原始类型)也不会得到List<Integer>
(因为自动装箱仅适用于原始类型,但any数组不是原始类型,甚至int[]
) .
看看Arrays.asList() not working as it should?,特别是这个答案:***.com/a/1467940/1393766
必须打开一个IDE来修复它!呵呵。修改! :) 谢谢!以上是关于如何删除数组中的最后一个逗号和空格? Java [重复]的主要内容,如果未能解决你的问题,请参考以下文章