Java按原样打印一个巨大的字符串数组

Java按原样打印一个巨大的字符串数组,java,string,delimiter,Java,String,Delimiter,有一个字符串数组,行[],我想在它们之间放置分隔符。我想维持秩序,例如如果 row[0] was "Gold", row[1] was "Costly", row[2] was NULL, row[3] was NULL, row[5] was "Bronze", row[6] was "Cheaper", 我希望在字符串数组中放置分隔符(例如\t)时保留空值。所以我的新字符串应该是 'Gold \t Costly \t \t Bronze \t Cheaper'. 我可以做类似的

有一个字符串数组,
行[]
,我想在它们之间放置分隔符。我想维持秩序,例如如果

row[0] was "Gold",
row[1] was "Costly", 
row[2] was NULL,
row[3] was NULL, 
row[5] was "Bronze", 
row[6] was "Cheaper", 
我希望在字符串数组中放置分隔符(例如\t)时保留空值。所以我的新字符串应该是

'Gold \t Costly \t \t Bronze \t Cheaper'. 
我可以做类似的事情

'System.out.println(row[0] + "\t" + row[1] +"\t" +row[2]+.......' 

但问题是字符串数组的长度超过120。有更好的方法吗?(我不能使用for循环,因为我把它和其他东西放在一个映射器中)。如果它是String.format(),你能告诉我怎么做吗?

标准API中没有这方面的内容。有几个第三方软件包有一个“join”方法,可以满足您的需要(还有一些)。特别好的是番石榴。(根据Tim的评论,库中的方法也可以满足您的所有需要。)使用一个好的第三方库可以消除许多编码问题

如果不希望(或不允许)使用第三方库,可以编写一个方法,使用您选择的分隔符连接元素:

public static String join(String[] data, String delimiter) {
    StringBuilder sb = new StringBuilder();
    if (data != null && data.length > 0) {
        for (String item : data) {
            sb.append(String.valueOf(item);
            sb.append(delimiter);
        }
        // chop off the last delimiter
        sb.setLength(sb.length() - delimiter.length());
    }
    return sb.toString();
}
然后,您可以在任何要使用字符串连接表达式的地方使用
join()
。例如:

System.out.println(join(row, "\t"));

标准API中没有关于这方面的内容。有几个第三方软件包有一个“join”方法,可以满足您的需要(还有一些)。特别好的是番石榴。(根据Tim的评论,库中的方法也可以满足您的所有需要。)使用一个好的第三方库可以消除许多编码问题

如果不希望(或不允许)使用第三方库,可以编写一个方法,使用您选择的分隔符连接元素:

public static String join(String[] data, String delimiter) {
    StringBuilder sb = new StringBuilder();
    if (data != null && data.length > 0) {
        for (String item : data) {
            sb.append(String.valueOf(item);
            sb.append(delimiter);
        }
        // chop off the last delimiter
        sb.setLength(sb.length() - delimiter.length());
    }
    return sb.toString();
}
然后,您可以在任何要使用字符串连接表达式的地方使用
join()
。例如:

System.out.println(join(row, "\t"));

您应该为循环使用
,然后:

String[] row = {"123",null,"ABC"};
StringBuilder sb = new StringBuilder();
for(String s : row){
  if(s != null){
    sb.append(s);
  }

  sb.append("\t");
}
System.out.println("Your result string : "+sb.toString());
这张照片是:

Your result string : 123        ABC 

您应该为
循环使用
,然后:

String[] row = {"123",null,"ABC"};
StringBuilder sb = new StringBuilder();
for(String s : row){
  if(s != null){
    sb.append(s);
  }

  sb.append("\t");
}
System.out.println("Your result string : "+sb.toString());
这张照片是:

Your result string : 123        ABC 

你能让你的问题可读吗?写一个清晰明了的问题是获得正确帮助的第一步。从性能角度来看,关键是如果你想在这里推出自己的问题(我建议你使用预先制作的库,比如@Ted Hopp提到的番石榴库),您希望使用StringBuilder而不是原始字符串连接,因为您要连接两个以上的内容。(只有2分,+在大多数情况下都可以。)你能让你的问题可读吗?写一个清晰明了的问题是获得正确帮助的第一步。从性能角度来看,关键是如果你想在这里推出自己的问题(我建议你使用预先制作的库,比如@Ted Hopp提到的番石榴库),您希望使用StringBuilder而不是原始字符串连接,因为您要连接两个以上的内容。(只有2个,+在大多数情况下都很好。)ApacheCommonsLang有一个方法,可以做很多相同的事情。但是你应该为这样的用例使用一些预先构建的东西;重新发明像这样的基本控制盘几乎从来都不是一个好主意,因为它浪费了您的时间,而且很有可能您的实现不如您可以使用的库中的控制盘好。@Tim-我同意避免重新发明控制盘。不过,有时开发人员被限制使用第三方库,即使是像ApacheCommons或Guava这样的好库。@TedHopp感谢您指出这一点。我在这样的环境中工作,当人们重新发明轮子或至少讨论实现时,它总是非常有用的,这样我们就可以重新发明轮子。@Ted Hopp我知道,我也在其中的一些环境中工作,我认识到有时候你自己滚,因为你无法获得许可引入“有风险的”第三方库,这就是为什么我认为开发人员在任何时候使用这些库都是很重要的,并且只有在必要的时候才使用自己的库。@Tim-有时候这些障碍仅仅是技术上的。我们有一些针对BlackBerry OS(QNX之前)的应用程序,这需要编译器以Java1.4为目标。任何实质性的第三方库都不可能被打包到这些应用程序中。ApacheCommonsLang有一个方法可以做很多相同的事情。但是你应该为这样的用例使用一些预先构建的东西;重新发明像这样的基本控制盘几乎从来都不是一个好主意,因为它浪费了您的时间,而且很有可能您的实现不如您可以使用的库中的控制盘好。@Tim-我同意避免重新发明控制盘。不过,有时开发人员被限制使用第三方库,即使是像ApacheCommons或Guava这样的好库。@TedHopp感谢您指出这一点。我在这样的环境中工作,当人们重新发明轮子或至少讨论实现时,它总是非常有用的,这样我们就可以重新发明轮子。@Ted Hopp我知道,我也在其中的一些环境中工作,我认识到有时候你自己滚,因为你无法获得许可引入“有风险的”第三方库,这就是为什么我认为开发人员在任何时候使用这些库都是很重要的,并且只有在必要的时候才使用自己的库。@Tim-有时候这些障碍仅仅是技术上的。我们有一些针对BlackBerry OS(QNX之前)的应用程序,这需要编译器以Java1.4为目标。任何实质性的第三方库都无法打包到这些应用程序中。OP希望保留空值。此外(根据示例),字符串末尾不应该有分隔符;在elements.OP之间要保留空值。此外(根据示例),字符串末尾不应该有分隔符;就在元素之间。