我正在从数组列表中打印出元素,并且希望在除最后一个单词之外的每个单词之间使用逗号。现在我正在这样做:
for (String s : arrayListWords) {
System.out.print(s + ", ");
}
如您所知,它会打印出这样的文字:one, two, three, four,
问题是最后一个逗号,我该如何解决?所有答案表示赞赏!
我正在从数组列表中打印出元素,并且希望在除最后一个单词之外的每个单词之间使用逗号。现在我正在这样做:
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]);
}
使用 a List
,您最好使用 aIterator
// assume String
Iterator<String> it = arrayListWords.iterator();
if (it.hasNext()) {
System.out.print(it.next());
}
while (it.hasNext()) {
System.out.print(", " + it.next());
}
我会这样写:
String separator = ""; // separator here is your ","
for (String s : arrayListWords) {
System.out.print(separator + s);
separator = ",";
}
如果 arrayListWords 有两个单词,它应该打印出 A,B
使用 Java 8 流:
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);
输出:结果是:Aplha, Beta, Gamma
迭代时,您可以将 附加String s
到StringBuilder
and 最后,您可以删除最后 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,它变得更加容易,不需要 3rd 方 -
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);
您可以使用 java.util 包中的标准函数并删除开头和结尾的块引号。
String str = java.util.Arrays.toString(arrayListWords);
str = str.substring(1,str.length()-1);
System.out.println(str);
您可以使用Iterator
onList
来检查是否还有更多元素。
仅当当前元素不是最后一个元素时,您才可以附加逗号。
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这样的 3rd 方库来为您执行此操作要容易得多。然后代码变为:
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() 方法。
String s = arrayListWords.toString();
System.out.println(s);
//This will print it like this: "[one, two, three, four]"
//If you want to remove the brackets you can do so easily. Just change the way you print.
这可能是使用最佳实践和没有“if”检查、没有不熟悉的库以及StringBuilder
连接字符串的最佳实践的逗号分隔字符串的最有效方法。
还有一个“大小”变量可以减少对.size()
方法的调用。
对于那些使用String[]
:
StringBuilder str = new StringBuilder();
String[] strArr = {"one", "two", "three", "four"};
int size = strArr.length;
str.append(strArr[0]);
for (int i = 1; i < size; i++) {
str.append(",").append(strArr[i]);
}
System.out.println(str.toString());
对于那些使用ArrayList<String>
:
StringBuilder str = new StringBuilder();
List<String> strArr = Arrays.asList(new String[]{"one", "two", "three", "four"});
int size = strArr.size();
str.append(strArr.get(0));
for (int i = 1; i < size; i++) {
str.append(",").append(strArr.get(i));
}
System.out.println(str.toString());
两者都产生:one,two,three,four
由于倒数第二个问题是错误的,这是我编写的一个小方法,用整数数组执行此操作,但转换为字符串数组。
public static void printArray(String[] arr){
for(int i = 0;i<arr.length;i++){
System.out.print(arr[i]);
if(i<(arr.length-1))
System.out.print(",");
}
}
这是我想出的:
String join = "";
// solution 1
List<String> strList = Arrays.asList(new String[] {"1", "2", "3"});
for(String s: strList) {
int idx = strList.indexOf(s);
join += (idx == strList.size()-1) ? s : s + ",";
}
System.out.println(join);
// solution 2
join = "";
for(String s: strList) {
join += s + ",";
}
join = join.substring(0, join.length()-1);
System.out.println(join);
// solution 3
join = "";
int count = 0;
for(String s: strList) {
join += (count == strlist.size()-1) ? s: s + ",";
count++;
}
System.out.println(join);
当然,我们可以使用StringBuilder
,但在所有解决方案中,我喜欢@Mav
答案,因为它更高效、更干净。