如何在字符串数组之间追加一个单词?

时间:2013-08-01 17:53:27

标签: java stringbuilder

我想在数组中的每个字符串之间附加单词AND,但我不希望它在字符串的末尾。这是我正在尝试的:

假设我想传递First, Second, Third

public void addString(String... myString) {
   StringBuilder sb = new StringBuilder();

   for(int i = 0; i < myString.length -1;) {
      sb.append("(" + myString[i] + " AND " + myString[i+1] + ")");
      i++;
   }

   System.out.println(sb);
}

我的输出是(First AND Second)(Second AND Third)

但我想要(First AND Second AND Third)

我做错了什么?

10 个答案:

答案 0 :(得分:7)

"("循环之前附加for,以便只打印一次。同样,在")"循环后附加for,以便只打印一次。最后,您可以循环遍历整个myString数组,仅添加该元素,而不是一次仅添加两个元素,并且只在需要时附加" AND "

答案 1 :(得分:4)

像这样调整你的答案:

public void addString(String... myString) {
   StringBuilder sb = new StringBuilder("(");

   for(int i = 0; i < myString.length -1; i++) {
      sb.append(myString[i] + " AND ");
   }
   if(myString.length == 0)
       sb.append(")");
   else
       sb.append(myString[myString.length - 1]);
   System.out.println(sb);
}

唯一的变化是:

  • 创建包含起始StringBuilder
  • (
  • 添加除最后一个元素之外的所有元素,并在其后添加"AND"
  • 添加最终元素和结束)

算法的重复部分是放置内部元素的部分。这也涵盖myString长度为1的情况。如果没有元素,则跳过最后一次添加并关闭&#34;)&#34;已添加。

答案 2 :(得分:3)

你应该将你想要的部分分开给你一个这样的循环。所以你想要(和)一次,只有一个词,你不需要和在它面前。

public void addString(String[] myString) 
{
   StringBuilder sb = new StringBuilder();
   sb.append("("+myString[0]);
   for(int i = 1; i < myString.length;i++) 
   {
      sb.append(" AND " + myString[i]);
   }
   sb.append(")")

   System.out.println(sb);
}

答案 3 :(得分:2)

要做你想做的事情,我可能会在StringUtils中使用join方法。

StringUtils.join Docs

来自文档:

public static String join(Object[] array,
          String separator)

Joins the elements of the provided array into a single String containing the provided list of elements.

No delimiter is added before or after the list. A null separator is the same as an empty String (""). Null objects or empty strings within the array are represented by empty strings.

 StringUtils.join(null, *)                = null
 StringUtils.join([], *)                  = ""
 StringUtils.join([null], *)              = ""
 StringUtils.join(["a", "b", "c"], "--")  = "a--b--c"
 StringUtils.join(["a", "b", "c"], null)  = "abc"
 StringUtils.join(["a", "b", "c"], "")    = "abc"
 StringUtils.join([null, "", "a"], ',')   = ",,a"


Parameters:
    array - the array of values to join together, may be null
    separator - the separator character to use, null treated as ""
Returns:
    the joined String, null if null array input

答案 4 :(得分:1)

您可以执行以下操作 -

Arrays.asList(myString).toString().replaceAll(",", " AND").replace("[", "(").replace("]", ")")
  • Arrays.asList(myString)array转换为List
  • toString()将其转换为类似[ele1, ele2, ele 3]的字符串。
  • 然后使用replaceAllreplace方法给出了 适当的输出。

第二个选项是使用join提供的StringUtils方法。

答案 5 :(得分:1)

当您想要在元素之间使用分隔符时,最常使用的方法是先添加分隔符,然后再添加字符串。仅在第一个元素之前跳过分隔符。

public void addString(String... myString) {
    String separator = " AND ";

    StringBuilder sb = new StringBuilder();

    sb.append('(');

    boolean needSeparator = false;
    for(String string : myString) {
        if (needSeparator) {
            sb.append(separator);
        } else {
            needSeparator = true;
        }
        sb.append(string);
    }

    sb.append(')');

    System.out.println(sb);
 }

如果你致电addString("First", "Second", "Third"),你会得到

(First AND Second AND Third)

仅使用1个输入addString("First")

就可以正常工作
(First)

甚至是空输入addString(),这会导致我在这里看到的大多数其他解决方案崩溃

()

可以将第一个元素移出循环,这样循环就不必检查它是否需要省略分隔符(最小的性能增益),但这会导致IMO代码不太可读。 E.g:

if (myString.length > 0) {
    // append first element without separator
    sb.append(myString[0]);

    // implicitly checks that length > 1
    for (int i = 1; i < myString.length; i++) {
        // append separator unconditionally
        sb.append(separator);
        sb.append(myString[i]);
    }
}

答案 6 :(得分:0)

parenthesis之前和之后附加For Loop

一次仅在element中附加一个String

删除String之后For Loop末尾的最后“与”。

public void addString(String... myString) {
    StringBuilder sb = new StringBuilder();

    sb.append("(");

    for(int i = 0; i < myString.length;) {
        sb.append(myString[i] + " AND ");
        i++;
    }

    sb = sb.substring(0, sb.length() - 5);

    sb.append(")");

    System.out.println(sb);
}

答案 7 :(得分:0)

获取Apache CommonsLang包http://commons.apache.org/proper/commons-lang/

然后使用其StringUtils join()方法,如下所述:http://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/StringUtils.html

System.out.println(StringUtils.join(myString, ' AND '));

答案 8 :(得分:-1)

更正后的代码:

 public void addString(String... myString) {
       StringBuilder sb = new StringBuilder();

       for(int i = 0; i < myString.length; i++) {
          if(i = 0){
             sb.append("(" + myString[i])
          }else if (i = myString.length-1){
             sb.append(myString[i] + ")");
          }else{
             sb.append(myString[i])
          }
          sb.append("(" + myString[i] + " AND " + myString[i+1] + ")");
       }

       System.out.println(sb);
    }

编辑:这是基于上述答案之一的更好版本:

public void addString(String[] myString) 
    {
       StringBuilder sb = new StringBuilder();
       sb.append("(");
       for(int i = 0; i < myString.length; i++){
          sb.append(myString[i] + " AND ");
       }
       sb.append(")")

       System.out.println(sb);
    }

答案 9 :(得分:-1)

试试这个:

public void addString(string[] myString) {
  StringBuilder sb = new StringBuilder();

   sb.Append("(");
   for(int i = 0; i < myString.length; i++) {
      sb.Append(myString[i] + " AND ");
   }

   string result = sb.ToString().Substring(0, sb.ToString().LastIndexOf("AND"));
   result += ")";

   System.out.println(result);
}