繁体   English   中英

打印元素的格式很好

[英]printing elements in a nice format

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

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

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

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

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

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

perldoc -f join
perldoc -f grep

然后将所有数据放入数组的方式

print join(',', @yourarray)

是一个很好的。

在循环连接之后,您也可以

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

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

eltToPrint =~s/,$//;

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

eltToPrint =~s/^,//;

Java没有内置join ,但如果您不想重新发明轮子,可以使用Guava的Joiner 它可以skipNulls ,或者useForNull(something)

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

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

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

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

例如在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;
  }
}

我想最简单的方法是创建一个新数组,其中只包含您需要打印的原始数组中的元素(即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);

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM