sneha
sneha

Reputation: 95

Fancy looping in Java

I have a problem wherein I have two strings, the length of one of which I will know only upon execution of my function. I want to write my function such that it would take these two stings and based upon which one is longer, compute a final string as under -

finalString = longerStringChars1AND2
   + shorterStringChar1 
   + longerStringChars3and4 
   + shorterStringChar2 
   + longerStringChars5AND6

...and so on till the time the SHORTER STRING ENDS.

Once the shorter string ends, I want to append the remaining characters of the longer string to the final string, and exit. I have written some code, but there is too much looping for my liking. Any suggestions?

Here is the code I wrote - very basic - public static byte [] generateStringToConvert(String a, String b){ (String b's length is always known to be 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();

}

Upvotes: 1

Views: 951

Answers (2)

Amit Deshpande
Amit Deshpande

Reputation: 19185

You can use StringBuilder to achieve this. Please find below source code.

  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);

}

Output

   yyxyyxyyxyyxyy

Upvotes: 1

Jap Mul
Jap Mul

Reputation: 18769

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);

Upvotes: 0

Related Questions