Java等价的C#String.Format()和String.Join()

Oma*_*eji 110 c# java string

我知道这是一个新手问题,但在Java中C#的字符串操作是否相同?

具体来说,我正在谈论String.FormatString.Join.

Gra*_*ner 92

Java String对象有一个format方法(从1.5开始),但没有join方法.

要获得一些尚未包含的有用的String实用程序方法,可以使用org.apache.commons.lang.StringUtils.

  • google collections:google-collections.googlecode.com也有一个Joiner. (13认同)
  • 仅就罗恩的评论而言,谷歌收藏品不久前更名为番石榴. (10认同)
  • 您应该更新此答案以反映Java 8引入了一个`String.join()`方法. (3认同)

All*_*nde 46

String.format.至于加入,你需要自己编写:

 static String join(Collection<?> s, String delimiter) {
     StringBuilder builder = new StringBuilder();
     Iterator<?> iter = s.iterator();
     while (iter.hasNext()) {
         builder.append(iter.next());
         if (!iter.hasNext()) {
           break;                  
         }
         builder.append(delimiter);
     }
     return builder.toString();
 }
Run Code Online (Sandbox Code Playgroud)

以上内容来自http://snippets.dzone.com/posts/show/91

  • 更确切地说:对于jdk1.4及更低版本的StringBuffer,对于jdk1.5及之后的StringBuilder,因为后者不同步,因此更快一些. (6认同)
  • 两个iter.hasNext()调用仍然是我通常附加分隔符然后"返回buf.substring(0,buf.length() - delimeter.length())". (2认同)
  • 您可以通过提前退出来简化它以避免分隔符:while(true)(add_iter; if(!iter.hasNext())break; add_delim;} (2认同)

Noe*_*Yap 38

番石榴自带Joiner.

import com.google.common.base.Joiner;

Joiner.on(separator).join(data);
Run Code Online (Sandbox Code Playgroud)


qnt*_*ntm 29

从Java 8开始,join()现在可以作为String类的两个类方法使用.在这两种情况下,第一个参数是分隔符.

您可以将各个CharSequences作为附加参数传递:

String joined = String.join(", ", "Antimony", "Arsenic", "Aluminum", "Selenium");
// "Antimony, Arsenic, Alumninum, Selenium"
Run Code Online (Sandbox Code Playgroud)

或者你可以通过Iterable<? extends CharSequence>:

List<String> strings = new LinkedList<String>();
strings.add("EX");
strings.add("TER");
strings.add("MIN");
strings.add("ATE");

String joined = String.join("-", strings);
// "EX-TER-MIN-ATE"
Run Code Online (Sandbox Code Playgroud)

Java 8还添加了一个新类,StringJoiner您可以像这样使用它:

StringJoiner joiner = new StringJoiner("&");
joiner.add("x=9");
joiner.add("y=5667.7");
joiner.add("z=-33.0");

String joined = joiner.toString();
// "x=9&y=5667.7&z=-33.0"
Run Code Online (Sandbox Code Playgroud)


Mel*_*var 17

TextUtils.join可在Android上使用


sgs*_*web 12

您还可以为字符串使用变量参数,如下所示:

  String join (String delim, String ... data) {
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < data.length; i++) {
      sb.append(data[i]);
      if (i >= data.length-1) {break;}
      sb.append(delim);
    }
    return sb.toString();
  }
Run Code Online (Sandbox Code Playgroud)