-3

我想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)

我究竟做错了什么?

4

10 回答 10

7

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

于 2013-08-01T17:56:39.813 回答
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。如果没有元素,则跳过最后的添加并添加结束“)”。

于 2013-08-01T18:06:19.150 回答
3

您应该像这样将您想要的部分与 for 循环分开一次。所以你想要 ( and ) 一次,并且在它前面只有一个你不需要 AND 的词。

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);
}
于 2013-08-01T18:06:24.247 回答
2

为了做你想做的事,我可能会使用joinStringUtils 中的方法。

StringUtils.join 文档

从文档:

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
于 2013-08-01T18:02:24.150 回答
1

您可以执行以下操作 -

Arrays.asList(myString).toString().replaceAll(",", " AND").replace("[", "(").replace("]", ")")
  • Arrays.asList(myString)将 转换arrayList.
  • toString()将其转换为类似于[ele1, ele2, ele 3].
  • 然后使用replaceAllandreplace方法给出适当的输出。

第二种选择是使用join提供的方法StringUtils

于 2013-08-01T18:05:05.247 回答
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 代码的可读性降低。例如:

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]);
    }
}
于 2013-08-01T18:11:52.577 回答
0

parenthesis在 .之前和之后附加For Loop.

一次只附加一个elementString

String去掉 .后面的最后一个“AND” 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);
}
于 2013-08-01T18:00:24.337 回答
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 '));
于 2013-08-01T18:03:11.103 回答
-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);
    }
于 2013-08-01T17:59:05.773 回答
-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);
}
于 2013-08-01T17:59:33.697 回答