2011-01-12 19 views
1

Ich habe ein String-Array, das ich es zu lange Variable analysieren muss.Konvertieren von Zeichenfolge [] in kommagetrennte Zeichenfolge.

Das String-Array enthält Werte wie ["9", "8"] usw. Ich möchte dies in "(9,8)" konvertieren (ich verwende es in der "IN" -Klausel einer SQL-Anweisung).

Was ist ein guter Weg, dies zu erreichen?

Hier ist mein Code:

String[] statusIdArray; 
long statsId = Long.parseLong("("); 
statsId = Long.parseLong(statusIdArray[0]); 
    for(int i=1; i < len; i++) { 
    statsId = Long.parseLong(statsId + ",") statsId=Long.parseLong(statsId + statusIdArray[i]); 
    statsId = Long.parseLong(statsId + ")"); 
    } 

Aber ich bekomme eine Number at input string "(9"

+0

ich diese bearbeitet unten einige Kommentare ab. Eine Sache zu überprüfen ist, beginnen Sie mit 'long []' oder 'string []'? Oder vielleicht habe ich es komplett vermasselt. In diesem Fall wird es rückgängig gemacht :) Die Angabe, welche SQL-Anweisung (z. B. durch Bereitstellen von Code) verwendet wird, hilft dabei, das Problem/die Aufgabe zu klären. –

+0

Ich denke, du solltest deine Frage umformulieren, ohne das Wort "lang" zu benutzen, weil es Leute verwirrt. Ich vermute, die Antwort ist eher in der Art der Java-Version von String.Join –

+0

Bitte aktualisieren Sie Ihre Frage, so dass es kohärent ist. Ich habe einen Code eingegeben, der in einem Kommentar enthalten war. –

Antwort

0

Was tun Sie Menschen durch "? Zu lange (9,8), um diese String-Array analysieren"

Haben Sie eine Reihe von Strings? Oder nur ein String? Möchten Sie jede Ziffer (getrennt durch ein Komma) in ein Long-Array eingeben? Oder möchten Sie (9,8) ein Long "98" werden?

+0

Ich möchte, dass jede Ziffer durch ein Komma getrennt wird und als lange Variable übergeben wird. – prasanna

0
// digits is your array 
String result = "IN ("; 
for (int i = 0; i < digits.length; i++) { 
    result += digits[i] + (i != digits.lenght - 1) ? ", " : ""; 
} 

result += ")"; 

Ich denke, ich habe es gerade jetzt.

Sie müssen vorsichtig mit dem Inhalt des Arrays sein, Sie könnten ein Opfer eines SQL Injection Angriffs sein.

+0

Ich habe ein String-Array, das aus digits.say besteht Beispiel (9 8) Ich muss dieses String-Array als lange Variable an das "IN" übergeben "clause of sql.it sollte wie (9,8) sein, wenn die long übergeben wird – prasanna

+0

Wahrscheinlich, wenn Sie planen, Zeichenfolge verketten, ist der" String "-Typ nicht die beste Wahl, weil es unveränderlich ist. Verwenden Sie stattdessen "StringBuilder". – Alexandr

+0

@Alexandr: Ich war in dem Verständnis, dass neuere Versionen der Java-Compiler es automatisch optimieren, um die Leistungseinbuße der verkettenden Strings zu vermeiden, dh die Verkettung wird automatisch in StringBuilder-Operationen übersetzt (ich weiß nicht einmal warum, vielleicht ich ' m falsch.) – Marcelo

0

Frage ist ein wenig unklar, aber vielleicht

long[] result = new long[ strings.length ]; 
for (int i=0; i<result.length; i++){ 
    result[i] = Long.parseLong(strings[i]); 
} 

i ein String-Array aufweist, die von digits.say Beispiel besteht (9 8) i dieses String-Array als lang variable passieren muß, um den " IN“Klausel sql.it sollte wie (9,8) sein, wenn die lange vergangen ist

In diesem Fall Gebrauch Jakarta Commons StringUtils (oder etwas anderes mit einem Verfahren beitreten)

sql.append("IN ("); 
sql.append(StringUtils.join(strings, ',')); 
sql.append(")"); 

Ich bin in der Regel auch völlig gegen direkte Interpolation von Variablen in SQL (Sie sollten Bindevariablen verwenden), aber das ist ein bisschen schwierig mit einer IN-Liste variabler Länge. Stellen Sie nur sicher, dass Sie keine seltsamen Daten in diesem String-Array erhalten.

+0

Diese Frage: http://stackoverflow.com/questions/337704/parameterizing-a-sql-in-clause hat einige knifflige Lösungen für das Problem der Parametrisierung von Listen variabler Länge in IN-Klauseln. (Es ist eine berühmte SO Frage.) – Marcelo

1

Unter der Annahme, dass sich die Frage: Ich habe ein Array von Strings, die ich SQL-Notation konvertiert werden soll, damit ich diese in einer SQL-Abfrage verwenden:

import java.util.Arrays; // may need to add this import somewhere among your import statements 

/** 
* Convert Java String[] to SQL array with varargs syntax. 
* Example method invocations:<blockquote><pre> 
* String sql1 = toSQLArray("1","2","3"); // should return "(1,2,3)" 
* String sql2 = toSQLArray(new String[] { "0", "5" }); // should return "(0,5)" 
* </pre></blockquote> 
* @param array string array. 
* @return String created by concatenating each array element using "," as separator and 
* adding "(" and ")" as delimiters for the result. 
*/ 
public String toSQLArray(String... array) { 
    StringBuilder sb= new StringBuilder(Arrays.toString(array)); 
    sb.replace(0,1, "("); 
    int l = sb.length(); 
    sb.replace(l-1, l, ")"); 
    return sb.toString(); 
} 
+0

Jungs der Code sieht so aus String [] statusIdArray; lange statsId = Long.parseLong ("("); statsId = Long.parseLong (statusIdArray [0]); for (int i = 1; i prasanna

Verwandte Themen