1

2 つの文字列があり、そのうちの 1 つの長さは関数の実行時にのみわかるという問題があります。これらの 2 つの文字列を取り、どちらが長いかに基づいて、次のように最終的な文字列を計算するように関数を記述したいと思います -

finalString = longerStringChars1AND2
   + shorterStringChar1 
   + longerStringChars3and4 
   + shorterStringChar2 
   + longerStringChars5AND6

...というように、短い文字列が終了するまで続きます。

短い文字列が終了したら、長い文字列の残りの文字を最後の文字列に追加して終了します。いくつかのコードを書きましたが、私の好みではループが多すぎます。助言がありますか?

これが私が書いたコードです - 非常に基本的な - public static byte [] generateStringToConvert(String a, String b){ (文字列 b の長さは常に 14 であることが知られています。)

    StringBuffer stringToConvert = new StringBuffer(); 

    int longer = (a.length()>14) ? a.length() : 14;
    int shorter = (longer > 14) ? 14 : a.length();

    int iteratorForLonger = 0;
    int iteratorForShorter = 0;
            while(iteratorForLonger < longer) {
                int count = 2;
                while(count>0){
                    stringToConvert.append(b.charAt(iteratorForLonger));

                    iteratorForLonger++;
                    count--; 
                    }

             if(iteratorForShorter < shorter && iteratorForLonger >= longer){
                 iteratorForLonger = 0;
             }
             if(iteratorForShorter<shorter){
                 stringToConvert.append(a.charAt(iteratorForShorter));
                 iteratorForShorter++;
             }
             else{
                 break;
             }


            }
    if(stringToConvert.length()<32 | iteratorForLonger<b.length()){
        String remainingString = b.substring(iteratorForLonger);
        stringToConvert.append(remainingString);
    }
    System.out.println(stringToConvert);
    return stringToConvert.toString().getBytes();

}
4

2 に答える 2

1

これを達成するために使用できますStringBuilder。以下のソースコードを見つけてください。

  public static void main(String[] args) throws InterruptedException {

    int MAX_ALLOWED_LENGTH = 14;
    String str1 = "yyyyyyyyyyyyyyyy";
    String str2 = "xxxxxx";

    StringBuilder builder = new StringBuilder(MAX_ALLOWED_LENGTH);
    builder.append(str1);
    char[] shortChar = str2.toCharArray();
    int index = 2;
    for (int charCount = 0; charCount < shortChar.length;) {
        if (index < builder.length()) {
            // insert 1 character from short string to long string
            builder.insert(index, shortChar, charCount, 1);
        }
        // 2+1 as insertion index is increased after after insertion
        index = index + 3;
        charCount = charCount + 1;
    }
    String trimmedString = builder.substring(0, MAX_ALLOWED_LENGTH);
    System.out.println(trimmedString);

}

出力

   yyxyyxyyxyyxyy
于 2012-09-03T13:42:18.007 に答える
0
String one = "longwordorsomething";
String two = "short";

String shortString = "";
String longString = "";

if(one.length() > two.length()) {
    shortString = two;
    longString = one;
} else {
    shortString = one;
    longString = two;
}

StringBuilder newString = new StringBuilder();

int j = 0;

for(int i = 0; i < shortString.length(); i++) {
    if((j + 2) < longString.length()) {
        newString.append(longString.substring(j, j + 2));
        j += 2;
    }
    newString.append(shortString.substring(i, i + 1));
}

// Append last part
newString.append(longString.substring(j));  
System.out.println(newString);
于 2012-09-03T12:27:58.103 に答える