не хочу печатать запятую в конце - PullRequest
1 голос
/ 25 января 2012

Я перебираю массив, который должен отображаться следующим образом:

    k,j,i,h,g,f,e,d,c,b,a,
a,a,a,a,a,a,a,a,a,a,a,
b,b,b,b,b,a,a,a,a,a,a,
z,y,x,w,v,u,t,s,r,q,p,

, но без запятой в конце.Это то, что я делаю до сих пор.

for ( int k = 0;  k < lineChar.length;  k++ ) //for printing in reverse order
            {
                if(lineChar[n] != ','){

                System.out.print(lineChar[n]);
                if(k == lineChar.length-1)
                   System.out.print("");
                else
                   System.out.print(",");

                --n;
                }
            }
            System.out.println();

Ответы [ 7 ]

4 голосов
/ 25 января 2012

Попробуйте, это эффективно, так как он печатает только один раз в конце, использует StringBuilder для построения строки, не проверяет наличие каких-либо условий внутри цикла и не требует никакой внешней библиотеки:

public static void printChar(char[] array) {
    if (array == null || array.length == 0)
        return;
    StringBuilder sb = new StringBuilder().append(array[0]);
    for (int i = 1; i < array.length; i++)
        sb.append(',').append(array[i]);
    System.out.println(sb);
}
2 голосов
/ 25 января 2012
int n=lineChar.lenght-1;

//Next 2 lines are edit after comment by @aix
while ((lineChar[n]==',') && (n>=0)) n--;
if (n>=0) System.out.print(lineChar[n--]);

for (;  n >=0;  n-- ) {
  if(lineChar[n] != ',') {
    System.out.print(",");
    System.out.print(lineChar[n]);
  }
}
1 голос
/ 25 января 2012

Вам также следует проверить класс столяра Гуавы: http://docs.guava -libraries.googlecode.com / git-history / v11.0.1 / javadoc / com / google / common / base / Joiner.html

Ваш пример сводится к следующему:

System.out.println(Joiner.on(',').join(lineChar));
0 голосов
/ 25 января 2012

почему бы вам просто не подставить последний символ после добавления полностью.

Например,

String text = "a, b, c, d,e, f, ";

String finalText = text.substring (0, text.length () - 1);

0 голосов
/ 25 января 2012

Если вы не делаете это для школы или чего-либо, что ограничено в ваших достижениях, вы можете попробовать что-то, где вы помещаете элементы в массив, а затем выполняете итерацию для распечатки (используя цикл for, оператор объединения илиСтроитель строк):

  var result = new Array()
  for (x = 0; x < lineChar.length; x++) {
    if (lineChar[x] != ',')
      result.push(lineChar[x]);
  }
  System.out.print(result.join(","));
  System.out.println(); 

или ... еще проще:

  var result = lineChar.split(",");
  System.out.print(result.join(",");
  System.out.println(); 

Отредактировано для удаления моего третьего варианта, поскольку есть другие, более точные в списке.

ПРИМЕЧАНИЕ: я программист на ac # и jscript, поэтому синтаксис для java может быть немного неприличным, но я решил использовать jscript, думая, что он будет похожим.

0 голосов
/ 25 января 2012

Мне нравится использовать переменную-разделитель с начальным пустым значением. Затем я печатаю разделитель перед каждым элементом, и после этого назначаю настоящий токен разделителя:

String delimiter = "";
for( int i=0; i<lineChar.length; i++ ) {
    System.out.print( delimiter );
    System.out.print( lineChar[ i ] );
    delimiter = ",";
}

Таким образом, у меня нет условных и только одно накладное назначение в каждом раунде.

Это описывает только способ не иметь ',' в конце вашего вывода. Но вы можете легко адаптировать другие условия (обратная итерация, пропуск специальных значений).

0 голосов
/ 25 января 2012

Я бы использовал StringBuilder для этого:

StringBuilder sb = new StringBuilder();
for (int n = lineChar.length - 1; n >= 0; --n) {
   if (lineChar[n] != ',') {
      if (sb.length() > 0) {
         sb.append(',');
      }
      sb.append(lineChar[n]);
   }
}
System.out.println(sb.toString());

Я предполагаю, что if (lineChar[n] != ',') существует для предотвращения печати любых запятых, которые могут быть частью массива. Если он существует по какой-либо другой причине, пожалуйста, объясните его цель.

...