假设我有一个datastructure
n
元素(0, 1, ... , n-1)
。
并假设这些元素有一些我想要打印的属性(假设int
)。我想在一行打印datastructure
,并带有分隔符(comma
,space
)。所以,结果将是这样的
13, 14, 15, 16, 17
添加逗号和空格(在Java中)的最佳方法是什么?
这些是我采取的方法:
如果datastructure
为Iterable
,则从0 to n-2
进行迭代,并将分隔符附加到每个分隔符,然后打印最后一个元素。
循环遍历所有元素并将所有内容追加到空String
(或Stringbuilder
),然后在最后删除最后一个分隔符(hardcoded
)。
我觉得有更好的东西。
编辑:这个问题很独特。 '可能重复'只涉及打印,而不是弄乱分隔符。
Edit2:按要求尝试
// 1st approach
public void printStuff(ArrayList<Integer> input) {
for (int i=0; i<input.size()-1; i++) {
System.out.print(input.get(i) + ", ");
}
System.out.println(input.get(input.size()-1);
}
另一次尝试
// 2nd approach
public void printStuff(ArrayList<Integer> input) {
StringBuilder sb = new StringBuilder();
for (int i=0; i<input.size(); i++) {
sb.append(input.get(i)+", ");
}
sb.substring(0, input.size()-2);
System.out.println(sb.toString());
}
答案 0 :(得分:6)
Java 8的流式API最终提供了一种优雅的原生方式,无需借助丑陋的if-else结构或使用第三方。
假设您有MyClass
个对象的列表,并假设MyClass
有getPropery()
访问方法返回int
,您可以这样做:
List<MyClass> list = ...;
String concatination = list.stream()
.map(p -> String.valueOf(p.getProperty()))
.collect(Collectors.joining(", "));
答案 1 :(得分:1)
使用迭代器我会检查是否还有任何项目。 如果是这样,请添加分隔符:
if (i.hasNext()) s.append(", ");
答案 2 :(得分:1)
使用一些Java 8 Stream魔法:
List<Integer> list = Arrays.asList(1, 2, 3) //just so we have a list to work on
String result = list.stream()
.map(it -> it.toString())
.collect(Collectors.joining(", "))
答案 3 :(得分:0)
您可以使用框架,如下所示:
https://google-collections.googlecode.com/svn/trunk/javadoc/com/google/common/base/Joiner.html
Joiner.on( “”)。加入(列表)
答案 4 :(得分:0)
您可以移除第一个元素,将其添加到字符串中并向其添加, <string>
:
List<String> lst = new ArrayList<String>();
// add elements
StringBuilder buffer = new StringBuilder();
buffer.append(lst.remove(0));
for(String s : lst) {
buffer.append(", ").append(s);
}