在数组中除最后一个项目之外的项目之间插入分号

时间:2015-03-04 15:43:16

标签: java loops

根据此answer中已接受的post,我有以下代码:

if (authors.length >= 1) {
    System.out.print(authors[0]);
}

for (int i = 1; i < authors.length; i++) {
    System.out.print("; " + authors[i]);
}

所以这个输出是author1; author2; author3 如何将其更改为author1; author2 & author3?如果只有2位作者,则输出应为author1 & author2。提前谢谢。

6 个答案:

答案 0 :(得分:5)

您只需要在循环中添加一个条件来处理最后一种情况:

for (int i = 1; i < authors.length; i++) {
    if(i == authors.length - 1)
        System.out.print("& " + authors[i]);
    else
        System.out.print("; " + authors[i]);
 }

答案 1 :(得分:3)

执行此操作的一种方法是更改​​代码的结构以使用循环和boolean标志而不是条件,如下所示:

boolean isFirst = true;
for (int i = 0 ; i != authors.length ; i++) {
    if (!isFirst) {
        System.out.print(i == authors.length-1 ? "& " : "; ");
    } else {
         isFirst = false;
    }
    System.out.print(authors[i]);
}

Demo.

答案 2 :(得分:2)

您可以递归地将案件清楚地分开。似乎缺乏其他答案。

这是代理功能:

public static String doIt(String[] authors){

    if (authors == null || authors.length == 0){
        return "";
    }

    if (authors.length == 1){
        return authors[0];
    }

    return authors[0] + doHelper(authors, 1);

}

辅助函数:

public static String doItHelper(String[] authors, int index){
    if (index == authors.length - 1){
        return " & " + authors[index];
    }
    return "; " + authors[index] + doItHelper(authors, index + 1);

}

正如评论中所述(感谢@JNYRanger),当性能成为问题时,这是最佳。

现在无法测试,所以我希望这个想法很明确。

答案 3 :(得分:1)

以这种方式尝试:

    String[] authors = { "1", "2", "3", "4", "5" };

    StringBuffer sb = new StringBuffer();
    for (int i = 0; i < authors.length; i++) {

        sb.append(authors[i]);
        if (i + 2 < authors.length) {
            sb.append(";");
        } else if (i + 2 == authors.length) {
            sb.append("&");
        }
    }
    System.out.print(sb.toString());

答案 4 :(得分:1)

for (int i = 0; i < authors.length; i += 1) {
    if (i > 0) {
        System.out.print(i < authors.length - 1 ? "; " : " & ");
    }
    System.out.print(authors[i]);        
}

答案 5 :(得分:1)

String[] authors = {"a", "b", "c", "d"};
for (int i = 0; i < authors.length; i++) {
   System.out.print((i != 0 ? (i == authors.length - 1 ? " & " : "; ") : "") + authors[i]);
}