2014-10-21 4 views
0

Как я могу отобразить последний элемент массива без запятой? Например, у меня есть следующий SQL-запрос, который я хочу выполнить:Условие отображения последнего элемента массива в Java

SELECT name, year FROM student WHERE id = 9;

String[] columns = new String[] { name, year }; 
     String query; 

     int length = columns.length; 
     int max = 0; 
     int i; 

     if (length > 0) { 

      query = "SELECT "; 
      for (i = 0; i < length; i++) { 
       query += columns[i] + ", "; 
       max++; 
       if(max <= length){ 
        query += columns[i]; 
       } 

      } 
      query += " FROM " + table + " WHERE id = " + column.getId() + ";"; 

Это будет выполнить следующий запрос: «Выберите имя, год, от студента WHERE ID = 9» (Поглотитель имеет сканер в нем я ввести идентификатор на клавиатуре, но как я могу избавиться от запятой в последнем элементе?

Я до сих пор пытался создать инструкцию IF, но я потерпел неудачу. Моя логика имеет смысл, но я понятия не имею, как записать ее в код.

Я хочу сказать: «Если я равен столбцам [max i - 1], тогда отображает последний элемент массива без запятой».

+0

Не следует исходный неверный код дать 'ВЫБЕРИТЕ имя, nameyear, год от'? Это похоже на то, что вы добавляете 'column [i]' дважды в одну итерацию. – ADTC

ответ

3

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

for (i = 0; i < length; i++) { 
    query += columns[i]; 
    if (i<length-1) 
     query += ", "; 
} 

Он проверяет, перед добавлением запятой, является ли последний элемент списка.

Если вы используете Java 8, теперь вы можете сделать это в одной строке, гораздо более аккуратно:

query += String.join(", ", columns); 

Если вы не используете Java 8, и если вы делаете это много, вы можете использовать Google Guava, чтобы сделать это в одной строке:

query += Joiner.on(", ").join(columns); 
+0

Я тоже это сделал, за исключением того, что я поставил «query + = columns [i];» внутри оператора if и запятой. Большое вам спасибо, ваш код имеет смысл. – MrSilent

+0

Для этого вам не нужен Google Guava. С ** Java 8 ** класс 'String' получил метод' join() '. Соответствующим вызовом будет 'query + = String.join (", ", columns);' – ifloop

+1

@ifLoop Спасибо, я тоже об этом упоминаю. Трудно узнать, в какой степени можно предположить, что люди используют Java 8, но определенно должны были упомянуть об этом. –

1

Я думаю, что вы хотите:

query += columns[i]; 
if(i != length-1) 
    query += ", "; 
2

при использовании Java 8, вы можете использовать String#join() для этого:

query += String.join(", ", columns); 

или, опять-таки с Java 8, вы можете использовать поток API:

query += IntStream.range(0, columns.length) 
     .mapToObj(index -> columns[index]) 
     .collect(Collectors.joining(", ")); 

Кроме того, вы должны рассмотреть вопрос о замене String query с StringBuilder

final String[] columns = new String[]{"name", "year"}; 
final StringBuilder query = new StringBuilder(); 

// ... 

query.append("SELECT "); 
query.append(String.join(", ", columns)); 
query.append(" FROM "); 
query.append(table); 
// ... 

Вы получаете конечный результат по телефону query.toString()

+0

Стоит упомянуть, что String.join был добавлен в Java 8 для тех, кто еще не использует его по какой-либо причине. –

+0

@ AnthonyGrist Сделал это сейчас :) – ifloop

3

Y НУ может изменить чек, а не добавить запятой перед первой колонкой:

for (i = 0; i < length; i++) { 
    if (i > 0) 
     query += ", "; 
    query += columns[i]; 
} 

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

1

Почему просто не так?

query += columns[0]; 
for (i = 1; i < length; i++) { 
     query += ", "+ columns[i]; 
} 

вы не используете какой-либо unnessesery, если заявление, и это делает точно такую ​​же работу

Смежные вопросы