如何在java中用逗号分隔输出



我编写了这个程序来计算一组数字

public void himpunanIrisan(){
System.out.print("The Result is  {");
for(int k=1; k<=setofB; k++){
boolean Sama = false;
for(int i=1; i<=setofA; i++){
if(numberB[k] == numberA[i]){
Sama = true;
}
} if (Sama==true){
System.out.print(numberB[k]+ ",");
}
} System.out.println("}");
}

,输出如下所示

The Result is {1,2,}

有没有办法让另一个逗号消失?

改变这一行:

System.out.print(numberB[k]+ ",");

应该可以。

System.out.print(numberB[k]+ (k < setofB ? "," : ""));

我假设你只是一个初学者,并试图学习,这就是为什么我尝试使用基本级别的解决方案。

public void himpunanIrisan(){
int[] numberB = {0,1,2,3,4};
int setofB = numberB.length-1;
int[] numberA = {0,1,2,5,6};
int setofA = numberA.length-1;
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("The Result is  {");
boolean initParam = true;
for(int k=1; k<=setofB; k++){
boolean Sama = false;
for(int i=1; i<=setofA; i++){
if(numberB[k] == numberA[i]){
Sama = true;
}
} if (Sama && initParam){
initParam = false;
stringBuilder.append(numberB[k]);
} else if(Sama) {
stringBuilder.append(",");
stringBuilder.append(numberB[k]);
}
}
stringBuilder.append("}");
System.out.println(stringBuilder);
}
}

结果是{1,2}

使用连接收集器将更容易,并帮助您避免重新发明轮子。此外,将数组转换为Sets将比在两个数组上嵌套循环(O(m+n)而不是O(m*n),其中m和n是两个数组的大小)执行得更好:

Set<Integer> setB = stream(numberB).boxed().collect(Collectors.toSet());
System.out.println(
Arrays.stream(numberA)
.boxed()
.filter(setB::contains)
.map(Object::toString)
.collect(Collectors.joining(",", "{", "}"))
);

想法来自如何删除打印到控制台由System.out.println()的东西?

可以使用

System.out.print("b");

删除","字符从STDOUT(参见链接了解如何使它在eclipse中工作)。或者您可以将代码更改为如下内容例如:

public void himpunanIrisan(){
boolean isFirst = true;
System.out.print("The Result is  {");
for(int k=1; k<=setofB; k++){
boolean Sama = false;
for(int i=1; i<=setofA; i++){
if(numberB[k] == numberA[i]){
Sama = true;
}
} 
if (Sama==true){
if(isFirst) {
System.out.print(numberB[k]);
isFirst = false;
} else {
System.out.print("," + numberB[k]);
}

}
} System.out.println("}");
}

StringJoiner在这种情况下确实很方便。

public void himpunanIrisan(){
StringJoiner joiner = new StringJoiner(",");
for(int k=1; k<=setofB; k++){
boolean sama = false;
for(int i=1; i<=setofA; i++){
if(numberB[k] == numberA[i]) sama = true;
} 
if(sama) joiner.add(numberB[k]);
}
System.out.printf("The Result is {%s}", joiner.toString());
}

在输出的末尾不会有任何额外的逗号。

删除最后两个print,并将这个* print in添加到第二个for循环中:

system . out。println(数字b [k] + (k<",";:";

}"));

最新更新