2014-10-21 3 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() + ";"; 

이 다음 쿼리를 실행합니다. (게터 그 안에 스캐너를 가지고 "ID = 9 학생 FROM, SELECT 이름, 올해를"내가 어떻게 할 수있는 키보드의 ID를 입력 만하고있어

나는 이렇게하기 위해 IF 문을 만들려고했지만 실패했다. 내 논리는 의미가 있지만, 코드로 작성하는 방법을 모른다.

"만약 i가 열 [최대 i - 1]과 같으면 쉼표없이 배열의 마지막 요소를 표시합니다."

+0

원래 잘못된 코드가'SELECT 이름, nameyear, 년 FROM'을주지해야 정확히 같은 일을합니까? 그것은 당신이'columns [i]'를 한 번 반복해서 두 번 추가하기 때문에 생긴 것이다. – ADTC

답변

3

이 시도 :

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

그것은이리스트의 마지막 요소인지, 쉼표를 추가하기 전에, 확인합니다.

자바 8 사용하는 경우, 당신은 훨씬 더 깨끗하게, 한 줄에 작업을 수행 할 수 있습니다

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

당신이 자바 8 사용하지 않는 경우와이 많이 할 경우, 자바 8를 사용하는 경우

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

나는 "query + = columns [i];"를 넣는 것을 제외하고 역시 그렇게했다. if 문 안쪽과 쉼표 바깥 쪽. 대단히 감사합니다. 코드가 의미가 있습니다. – MrSilent

+0

Google 구아바가 필요하지 않습니다. ** Java 8 **에서는'String' 클래스에'join()'메소드가 있습니다. 적절한 호출은'query + = String.join (",", columns);' – ifloop

+1

@ifLoop입니다. 고마워요. 사람들이 자바 8을 사용하고 있다고 가정 할 수있는 정도를 알기는 어렵지만 분명히 언급해야합니다. –

1

난 당신이 원하는 생각 :

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

이에 대한 String#join()을 사용할 수 있습니다 :

query += String.join(", ", columns); 
당신은 한 줄에 그것을 할 Google Guava을 사용할 수 있습니다 다시 6,

또는 자바 8와 함께, 당신은 스트림 API의 사용을 만들 수 있습니다

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

은 또한 당신이 교체를 고려해야합니다 당신의 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); 
// ... 

String query 당신이 얻을 전화로 최종 결과 query.toString()

+0

String.join이 Java 8에서 추가 된 이유는 무엇이든간에 아직 사용하지 않는 사람들에게 유용 할 수 있습니다. –

+0

@AnthonyGrist 지금 해냈어 :) – ifloop

3

OU 체크를 반대하고, 첫 번째 열 전에 쉼표를 추가 할 수 없습니다 :

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를 사용 해달라고, 그리고

관련 문제