打印元素的格式很好

时间:2010-07-27 10:10:32

标签: java perl list printing

关于困扰我的一个真正的小问题,我有一个简单的一般性问题: 我正在打印一个元素列表,所以我没有关于打印元素数量的事先知识。我想要一个简单的格式,其中元素由逗号(elem1,elem2 ...)或类似的东西分隔。现在,如果我使用一个简单的循环:

while(elements to check) {
  if (elem should be printed) {
     print elem . ","
  }
}

我在最后一个元素后面得到一个逗号... 我知道这听起来很愚蠢,但有办法解决这个问题吗?

6 个答案:

答案 0 :(得分:4)

让我们假设“应该打印”意味着“至少有一个非空白字符。在Perl中,写这个的惯用方法是(你需要调整grep才能尝试):

print join "," => grep { /\S/ } @elements;

“grep”在其他语言中类似于“filter”,而/ S /是匹配一个非空白字符的正则表达式。仅返回与表达式匹配的元素。 “加入”应该是不言自明的。

perldoc -f join
perldoc -f grep

答案 1 :(得分:3)

将所有数据放入数组然后

的方式
 print join(',', @yourarray)

是一个很好的。

您也可以在循环连接之后

declare eltToPrint
 while (LOOP on elt) {
       eltToPrint .= elt.','
}

使用正则表达式删除最后一个逗号:

eltToPrint =~s/,$//;

ps:如果你把逗号放在开头

也可以
eltToPrint =~s/^,//;

答案 2 :(得分:2)

Java没有内置join,但如果您不想重新发明轮子,可以使用Guava's Joiner。它可以skipNullsuseForNull(something)

  

使用分隔符连接文本(指定为数组,Iterable,varargs甚至Map)的对象。它会将结果附加到Appendable或将其作为String返回。例如:

Joiner joiner = Joiner.on("; ").skipNulls();
return joiner.join("Harry", null, "Ron", "Hermione");
     

返回字符串"Harry; Ron; Hermione"。请注意,所有输入元素在被追加之前都会使用Object.toString()转换为字符串。

答案 3 :(得分:0)

根据语言的不同,您有多种选择。

e.g。在JavaScript中只做:

var prettyString = someArray.join(', ');

在PHP中你可以implode()

$someArray = array('apple', 'orange', 'pear');
$prettyString = implode(",", $someArray);

如果所有其他方法都失败了,您可以在每个条目后添加逗号并在完成后修剪最后一个,或者在/ foreach循环时检查您(对于perf不好)如果这不是最后一项(如果是,则添加一个逗号)

更新: ,因为您注意到了Java ...您可以创建一个这样的方法:

public static String join(String[] strings, String separator) {
  StringBuffer sb = new StringBuffer();
  for (int i=0; i < strings.length; i++) {
    if (i != 0) sb.append(separator);
      sb.append(strings[i]);
  }
  return sb.toString();
}

更新2: 听起来你真的想要这个,如果你没有输出每个元素(伪代码):

first = true;
for(item in list){
  if(item meets condition){
    if(!first){
      print ", ";
    } else {
      first = false;
    }
    print item;
  }
}

答案 4 :(得分:0)

我想最简单的方法是创建一个新数组,其中只包含您需要打印的原始数组中的元素(即filter操作)。然后打印新创建的数组,最好使用语言的内置数组/向量打印/连接函数。

(在Perl中)

@orig=("a","bc","d","ef","g");
@new_list=();
for $x(@orig){
    push(@new_list,$x) if (length($x)==1);
}
print join(',',@new_list)."\n";

(在Java中)

List<String> orig=Arrays.asList(new String[]{"a","bc","d","ef","g"});
List<String> new_list=new ArrayList<String>();
for(String x: orig){
    if (x.length()==1)
        new_list.add(x);
}
System.out.println(new_list);

答案 5 :(得分:0)

为什么不在每个元素(但第一个元素)之前添加逗号?伪代码:

is_first = true
loop element over element_array
BEGIN LOOP
   if (! is_first)
       print ","
   end if
   print element
   is_first = false
END
print NEWLINE