我正在从一个 ArrayList
中打印元素,并希望在每个单词后面都加上逗号,除了最后一个单词。
目前,我的做法是这样的:
for (String s : arrayListWords) {
System.out.print(s + ", ");
}
它会像这样打印出这些单词:
one, two, three, four,
问题在于最后一个逗号,我该如何解决?
我正在从一个 ArrayList
中打印元素,并希望在每个单词后面都加上逗号,除了最后一个单词。
目前,我的做法是这样的:
for (String s : arrayListWords) {
System.out.print(s + ", ");
}
它会像这样打印出这些单词:
one, two, three, four,
问题在于最后一个逗号,我该如何解决?
如果存在第一个单词,请将其单独打印。然后按逗号、第一个元素,再依次打印模式中的下一个元素。
if (arrayListWords.length >= 1) {
System.out.print(arrayListWords[0]);
}
// note that i starts at 1, since we already printed the element at index 0
for (int i = 1; i < arrayListWords.length, i++) {
System.out.print(", " + arrayListWords[i]);
}
使用Iterator
更适合使用List
// assume String
Iterator<String> it = arrayListWords.iterator();
if (it.hasNext()) {
System.out.print(it.next());
}
while (it.hasNext()) {
System.out.print(", " + it.next());
}
List
API。 - Sotirios DelimanolisarrayListWords
是一个链表而不是一个数组列表,那么这个解决方案将成为一个 O(n^2)
的解决方案,但它应该是一个 O(n)
的解决方案。 - Boris the Spider我会这样写:
String separator = ""; // separator here is your ","
for (String s : arrayListWords) {
System.out.print(separator + s);
separator = ",";
}
如果arrayListWords有两个单词,它应该打印出A,B。使用Java 8 Streams:
Stream.of(arrayListWords).collect(Collectors.joining(", "));
StringJoiner str = new StringJoiner(", ");
str.add("Aplha").add("Beta").add("Gamma");
String result = str.toString();
System.out.println("The result is: " + result);
在迭代过程中,您可以将String s
附加到StringBuilder
中,在最后,您可以删除最后2个字符,即多余的,
和空格(res.length() -2
)
StringBuilder res = new StringBuilder();
for (String s : arrayListWords) {
res.append(s).append(", ");
}
System.out.println(res.deleteCharAt(res.length()-2).toString());
使用Java 8,变得更加容易,不需要第三方工具 -
final List<String> words = Arrays.asList("one", "two", "three", "four");
Optional<String> wordsAsString = words.stream().reduce((w1, w2) -> w1 + "," + w2);
wordsAsString.ifPresent(System.out::println);
在访问值之前调用“Optional#isPresent()”。
我对lambda表达式还不是非常自信,你知道如何在这里使用.ifPresent()
吗?提前感谢你。 - mettersString str = java.util.Arrays.toString(arrayListWords);
str = str.substring(1,str.length()-1);
System.out.println(str);
它也可以使用Java 8的static
方法String.join()
来实现,有两种方式。
返回一个由
CharSequence
元素的副本与指定delimiter
的副本拼接而成的新String
。
这两个版本的第一个参数都是delimiter
,类型为CharSequence
,第二个参数可以是varargs的CharSequence
或者Iterable<? extends CharSequence>
。
这两个方法在内部生成一个byte
数组,根据提供的elements和delimiter的编码将其填充,并将其转换为结果String
。
使用示例:String.join(CharSequence,CharSequence...)
String[] strings = {"one", "two", "three", "four"};
String joinedStr = String.join(", ", strings); // "one, two, three, four" - resulting String
使用示例{{link1:String.join(CharSequence,Iterable<? extends CharSequence>)
}}:
List<String> strings = List.of("one", "two", "three", "four");
String joinedStr = String.join(", ", strings); // "one, two, three, four" - resulting String
你可以在 List
上使用 Iterator
来检查是否有更多的元素。
然后只有当当前元素不是最后一个元素时,你才可以追加逗号。
public static void main(String[] args) throws Exception {
final List<String> words = Arrays.asList(new String[]{"one", "two", "three", "four"});
final Iterator<String> wordIter = words.iterator();
final StringBuilder out = new StringBuilder();
while (wordIter.hasNext()) {
out.append(wordIter.next());
if (wordIter.hasNext()) {
out.append(",");
}
}
System.out.println(out.toString());
}
然而,使用第三方库(如Guava)来为您完成此操作要容易得多。代码将变为:
public static void main(String[] args) throws Exception {
final List<String> words = Arrays.asList(new String[]{"one", "two", "three", "four"});
System.out.println(Joiner.on(",").join(words));
}
List<String> listWords= Arrays.asList(arrayListWords); // convert array to List
StringBuilder sb=new StringBuilder();
sb.append(listWords);
System.out.println(sb.toString().replaceAll("\\[|\\]",""));
toString()
,它将返回数组中每个元素的toString()
,并以逗号分隔。如果你不喜欢[
和]
,你可以把它们去掉。类似这样 - Josh M