-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、一度に 2 つの要素を追加するのではなく、その要素だけを追加し" AND "、必要な場合にのみ追加することができます。

于 2013-08-01T17:56:39.813 に答える
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

要素間にセパレーターが必要な場合に最もよく使用されるアプローチは、最初にセパレーターを追加し、次に文字列を追加することです。最初の要素の前のセパレータのみをスキップします。

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ます。

element一度に1 つだけ追加Stringします。

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 に答える
-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);
    }

編集:上記の回答の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 ");
       }
       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 に答える