How to remove last comma and space in array? Java
伙计们,我想知道如何从数组中删除多余的逗号和空格?当我运行程序时,它会给我1、2、3、4、5、。我想要的是1、2、3、4、5。主管道必须保持不变。PrintArray方法是我需要帮助的方法。
指重复的问题陈述。这是不同的,因为它要求用户输入一个数字并相应地打印数组。这不是重复的问题。
1 2 3 4 5 6 7 8 9 10 11 12
| 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。
不要一开始就打印出来。仅当i > 0时,在字符串前打印逗号。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| 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("]");
} |
简单的方法就是使用Arrays.toString。
1 2 3 4
| public static void printArray (int[] myArray )
{
System. out. print( Arrays. toString( myArray ) );
} |
注意,这将打印括号而不是大括号。为了完整性起见,如果您自己实现了这一点,除了其他边界条件(如长度=0)之外,不要忘记检查数组是否为null。
这里有一个使用StringBuilder的例子,在检查null和length=0之后,我总是删除最后两个字符。如果要为列表/数组中的每个项计算一个非常复杂的字符串,那么这可能比复制代码使每个项在循环之外更容易,并且比每次通过循环检查i==array.length-1稍微快一点。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| 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;,它将做一些与您的代码不同的事情。我觉得你的代码更有意义,它只是做不到同样的事情。
- 我假设这只是一个测试用例,这样他就可以生成输出,但是他可能也打算初始化数组,在这种情况下,他的问题与他的问题并不匹配。
- 是的,抱歉,我去掉了我的主要方法。我认为这会使阅读更容易。
我会这样修改它(在下一项之前打印逗号,对于索引>0)
1 2 3 4 5 6
| 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中,
1 2 3 4 5 6 7
| 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,它将包含一个元素,数组本身。您将不会得到List(因为泛型类型不能是基元类型)或List(因为autoboxing只适用于基元类型,但任何数组都不是基元类型,甚至int[])。
- 请看一下array.aslist()是否不能正常工作?特别是这个答案:stackoverflow.com/a/1467940/1393766
- 必须打开一个IDE来修复它!呵呵。修正!谢谢!