Загрузка данных


import java.util.ArrayList;
import java.util.List;

public class PlayTextProcessor {

    public static String groupLinesByRoles(String[] roles, String[] textLines) {
        List<StringBuilder> roleLines = new ArrayList<>(roles.length);
        for (int i = 0; i < roles.length; i++) {
            roleLines.add(new StringBuilder());
        }

        for (int lineIdx = 0; lineIdx < textLines.length; lineIdx++) {
            String currentLine = textLines[lineIdx];
            int displayLineNum = lineIdx + 1;

            for (int roleIdx = 0; roleIdx < roles.length; roleIdx++) {
                String rolePrefix = roles[roleIdx] + ":";
                if (currentLine.startsWith(rolePrefix)) {
                    String speech = currentLine.substring(rolePrefix.length());
                    roleLines.get(roleIdx)
                             .append(displayLineNum)
                             .append(")")
                             .append(speech)
                             .append("\n");
                    break;
                }
            }
        }

        StringBuilder result = new StringBuilder();
        for (int i = 0; i < roles.length; i++) {
            result.append(roles[i]).append(":\n");
            result.append(roleLines.get(i));
            result.append("\n");
        }

        if (result.length() > 0) {
            result.setLength(result.length() - 1);
        }

        return result.toString();
    }
}