удалить последнюю запятую из распечаток цикла JAVA

У меня возникла небольшая проблема с распечатками из цикла.

String str1 = null; 
for (int row=0; row<dfsa.length; row++) {

    System.out.print("\tstate " + row +": ");   

    for (int col=0; col<dfsa[row].length; col++) {  
        for (int i=0; i<dfsa_StateList.size(); i++) { // traverse thru dfsa states list                     
            if (dfsa_StateList.get(i).equals(dfsa[row][col])) {
                str1 = alphabetList.get(col)+ " " + i + ", ";
                System.out.print(str1);
            }
        }                   
    }           
    System.out.println();
}

Объяснение кода: он проходит через 2D-массив (строка и столбец), затем из каждого слота проходит через другой 1D-массивList, если этот слот в arrayList совпадает со слотом в 2D-массиве, печатает столбец из 2D-массива и индекс списка массивов

Пример вывода:

    state 0: b 1, c 2, 
    state 1: e 3, 
    state 2: a 4, 
    state 3: a 5, 
    state 4: r 6, 
    state 5: r 7, 
    state 6: e 8, 
    state 7: 
    state 8:

b 1 и c 2 находятся на одной строке, потому что в одной строке 2 спички. Мне нужна запятая только для разделения двух совпадений в одной строке. Я пытался использовать подстроку, некоторые регулярные выражения были найдены в Интернете, но они не работали.

Кроме того, я хочу отобразить «нет» для последних двух строк (состояние 7 и 8). Я тоже пытался это сделать, но все равно не повезло.

Дайте совет, спасибо


person Casper    schedule 18.08.2013    source источник


Ответы (3)


Попробуйте с:

String str1 = null; 
for (int row=0; row<dfsa.length; row++) {

    System.out.print("\tstate " + row +": ");   
    String line = "";
    for (int col=0; col<dfsa[row].length; col++) {  
        for (int i=0; i<dfsa_StateList.size(); i++) { // traverse thru dfsa states list                     
            if (dfsa_StateList.get(i).equals(dfsa[row][col])) {
                str1 = alphabetList.get(col)+ " " + i + ", ";
                line += str1;
            }
        }                   
    }    
    line = line.length() > 0 ? line.substring(0, line.length() - 2) : "None";
    System.out.println(line)       
}
person Paweł Piecyk    schedule 18.08.2013
comment
отлично работает, не могли бы вы помочь мне со 2-й частью тоже? (не печатать)? - person Casper; 18.08.2013

вы можете использовать

   for (int col = 0; col < dfsa[row].length; col++)
    {
        for (int i = 0; i < dfsa_StateList.size(); i++)
        { // traverse thru dfsa states list                     
            if (dfsa_StateList.get(i).equals(dfsa[row][col]))
            {
                str1 = alphabetList.get(col) + " " + i + ", ";
                if (str1.endsWith(","))
                {
                    int index = str1.lastIndexOf(",");
                    str1 = str1.substring(0, index);
                }
                if(str1.trim.isEmpty())
                {
                  System.out.print("None");
                }
                else
                {
                System.out.print(str1);
                }
            }
        }
    }
person muthukumar    schedule 18.08.2013

person    schedule
comment
не работает, весь массив без совпадений будет напечатан, если нет совпадений - person Casper; 18.08.2013
comment
В чем проблема, которую вы видите? - person harsh; 18.08.2013
comment
никто не печатается везде - person Casper; 18.08.2013