2016-07-28 16 views
1

Ich versuche, eine Zeichenfolge in Teile zu teilen, wo eine ,()spaces beteiligt sind.Splitting String in 2 oder mehr Regex

Es kommt aus einem Kombinationsfeld Element. Es sieht aus wie diese

ComboBox Artikel

(123456) LastName, FirstName MiddleName 

Und ich will es in Teile trennen

int employeeNumber = 123456 
String lastName = LastName 
String firstName = firstName 
String middleName = middleName 

So habe ich versucht, dies kann aber das Ergebnis mag ich nicht bekommen, weil es scheint, es wird nur durch Kommas getrennt.

String facultyName = adviserJcbx.getSelectedItem().toString().trim(); 
     String [] facultyNameSplit = facultyName.split(","); 
     String facultyLastName = facultyNameSplit[0]; 
     String facultyFirstName = facultyNameSplit[1]; 
     //String facultyMiddleName = facultyNameSplit[2]; 

Ich erhalte eine Fehlermeldung, wenn ich etwas versuchen, wie facultyName.split(",()\\s+");

Alle diese vier Variablen wird in CALLABLE gespeicherte Prozedur WHERE-Klausel wie

SELECT id from table WHERE empNo = employeeNumber AND lName = lastName AND fName = firstName AND mName = middleName; 

verwendet werden, ich hoffe, Sie können da helfen I online recherchiert, kann aber kein Beispiel finden, bei dem mehr Charaktere beteiligt sind.

Auch ist es eine einfachere Möglichkeit, eine Id eines Elements in GUI-Elemente zu erhalten, ohne eine gespeicherte Prozedur wie diejenigen zu schaffen, die Ich erstelle

CALL getFacultId(?,?,?,?); 

Hier ist der Screenshot.

enter image description here

Mein Ziel ist es, die Id zu bekommen, was in Kombinationsfeld ausgewählt wird, indem man sie spalten und sie die getFacultyId(?,?,?,?) gespeicherte Prozedur liefert.

Vielen Dank im Voraus.

Antwort

3

Verwenden Sie einen regulären Ausdruck wie folgt aus:

\(([^)]*)\)\s*([^,]+),\s*(\S+)\s*(\S*) 

Beispiel Java-Code für das:

String input = "(123456) LastName, FirstName MiddleName"; 
String regex = "\\(([^)]*)\\)\\s*([^,]+),\\s*(\\S+)\\s*(\\S*)"; 
Matcher m = Pattern.compile(regex).matcher(input); 
if (m.matches()) { 
    System.out.println("empNo = " + m.group(1)); 
    System.out.println("lName = " + m.group(2)); 
    System.out.println("fName = " + m.group(3)); 
    System.out.println("mName = " + m.group(4)); 
} 

Ausgabe

empNo = 123456 
lName = LastName 
fName = FirstName 
mName = MiddleName 
0

Ich glaube, Sie können CONCAT diese vier Spalten in Format, das Sie erwähnt:

SELECT id 
from table 
WHERE CONCAT('(', empNo, ') ', lName, ', ', fName, ' ', mName) = ?; 
+0

Dank für Ihren Vorschlag. Ich habe es tatsächlich geschafft, die verkettete Zeichenfolge in das Kombinationsfeld zu bekommen. Mein Problem ist jetzt, wie man die verkettete Zeichenkette in Teile teilt, damit ich sie zur WHERE-Klausel benutzen kann. Ich habe den Screenshot in der Beschreibung hinzugefügt. – p3ace

1

Ich würde vorschlagen, dass Sie einen regulären Ausdruck verwenden, anstatt split:

Pattern facultyPattern = Pattern.compile("\((\\d+)\) (\\w+), (\\w+) (\\w+)"); 
Matcher facultyMatcher = facultyPattern.match(facultyString); 
if (facultyMatcher.matches() { 
    int id = Integer.parseInt(facultyMatcher.group(1)); 
    String lastName = facultyMatcher.group(2); 
    String firstName = facultyMatcher.group(3); 
    String middleName = facultyMatcher.group(4); 
    ... 
} else { 
    // handle mismatch 
}