Здравейте хора, дано да ми отговори някой, ще съм благодарен. Фрагмента е от java но не намерих такъв форум, дано не е проблем, предполагам и на c# ще си върви

Задача:[ Напишете програма, която отпечатва всички подмножества на дадено множество от думи.] принтват се подмножествата заградени в скоби със запетая между тях и аз си играх да премахна последната запетая след последното множество което се принтва защото ме дразнеше, както и правилно изкарани спейсове между елементите и затварящата скоба на всяко отпечатване + ако елемент е null, да не изписва null :D Звучи адски тъпо но могат ли по по-елегантен начин да се направят всичките тези оформления ? Резултата е това:

(), (just), (random), (words), (just random), (just words), (random words), (just random words)

принт метода:

public static void printSubsets()  // Task 4
{
int indexCnt = 0; // пази общия брой на не-null елементите на всяко отпечатване
for (int i = 0; i < length; i++)
if (str[i] != null) indexCnt++;

System.out.print("(");
for (int i = 0; i < length; i++)
{
if (i == length - 1)
{
if (str[i] == null) System.out.print("");
else if (i == length - 1) System.out.printf(" %s", str[i]);
if (indexCnt == length) System.out.print(")");  // за да се постави коректно затваряща скоба

else System.out.print("), ");
}
else
{
if (str[i] == null) System.out.print("");
else 
{
if (i == 0) System.out.printf("%s", str[i]);
else System.out.printf(" %s", str[i]);
}
}
}

indexCnt = 0
}