Bonjour à tous, je me demandais s'il était possible de découper un string en partant de la droite de celle-ci.
En effet, je me retrouve avec de 2 base de données (les 2 bases ont le même nom). Dans ma première base (que je ne peux pas modifié), j'ai une table Professeur qui possède une colonne qui se nomme nom_prenom_matiere_vacataire et qui regroupe plusieurs infos.
Exemple :
01_Bertrand-Leeroy-Externe-Math(Vacataire)
02_Jean-pierre-Axel-Interne-Anglais(Titulaire)
Il m'a donc été demandé de créer une seconde base contenant les même tables dont Professeur.
Cette table doit posséder les même infos mais sur plusieurs colonnes c'est-à-dire :
Exemple :
Au lieu de nom_prenom_matière_vacataire, on obtient nom prenom matiere regime vacataire
Mon problème est que je ne parviens pas à découper toutes ces string en fonction des tirets sachant que certains nom possède un tiret
Exemple :
02_Jean-pierre-Axel-Interne-Anglais(Titulaire)
Colonne :
nom = 02_Jean-pierre prenom = Axel matiere = Anglais regime = Interne vacataire = NULL
Voici mon code qui permet le transfert de la BDD1 à la 2, puis mon découpage qui découpe les string en commençant par la gauche (le problème c'est cela ne fonctionne que pour les string ou le nom ne possède pas de tirets, j'en est donc conclu qu'il fallait plutôt découper les string en commençant par la droite)
Voici mon Code :
public class Professeur{
public Professeur() {
}
public void gestProfesseur() throws SQLException, IOException, FileNotFoundException {
Connection con = Connector_IGPV2_full.getInstance().getCon();
Connection con2 = Connector_IGPV2_2.getInstance().getCon();
ResultSet rs = con.prepareStatement("SELECT nom_prenom_matière_vacataire Professeur_v2_1.professeur").executeQuery();
PreparedStatement ps = con2.prepareStatement("INSERT INTO professeur(nom, prenom, matière, regime, "
+ "vacataire) values (?,?,?,?,?)");
while(rs.next()) {
String[] nom = cutNom(rs.getString("nom_prenom_matière_vacataire"));
if (nom[0] == null)
continue;
ps.setString(1, nom[0]);
ps.setString(2, nom[1]);
ps.setString(3, nom[3]);
ps.setString(4, nom[2]);
ps.setString(5, nom[4]);
con2.prepareStatement("UPDATE Professeur set vacataire = 'NULL' WHERE vacataire != 'Vacataire'").executeUpdate();
ps.executeUpdate();
}
rs.close();
ps.close();
con.close();
con2.close();
}
/**
* Découpe le champ nom_prenom_matière_vacataire
* @param nom
* @return String[] 0 = nom / 1 = prenom / 3 = matiere / 2 = regime / 4 = vacataire
*/
private String[] cutNom(String nom) {
String[] finalSplit = new String[6];
if (nom != null && !nom.equals("NULL") && nom.length() > 10) {
String temp1 = nom.substring(0, nom.indexOf("-"));
nom = temp1.replaceAll("\\s", "_") + " " + nom.substring(nom.indexOf("-")+1);
nom = nom.replaceAll("\\-", " ");
nom = nom.replaceAll("\\(", " ");
nom = nom.replaceAll("\\)", " ");
nom = nom.replaceAll("\\s", "\\|");
String[] rawSplit = nom.split("\\|");
finalSplit = new String[5];
finalSplit[0] = rawSplit[0];
finalSplit[1] = rawSplit[1];
finalSplit[2] = rawSplit[2];
finalSplit[3] = rawSplit[3];
finalSplit[4] = rawSplit[4];
}
return finalSplit;
}
public void truncateProfesseur() throws SQLException, IOException, FileNotFoundException {
Connection con2 = Connector_IGPV2_2.getInstance().getCon();
con2.prepareStatement("TRUNCATE TABLE professeur").executeUpdate();
con2.close();
}
}
Cordialement.
- Edité par Alistair Daniel 16 mai 2019 à 14:07:48
Je vois bien ou se situe votre problème, mais si jamais le prénom contenais également un nom composé ? vous serais également bloqué ou même apporterais des erreurs en partant de la droite également.
Bonjour à tous, j'aimerais juste savoir si vous pouviez m'expliquer comment découper un string en commençant par la droite.
Découpe par la gauche :
String temp1 = nom.substring(0, nom.indexOf("-"));
nom = temp1.replaceAll("\\s", "_") + " " + nom.substring(nom.indexOf("-")+1);
nom = nom.replaceAll("\\-", " ");
nom = nom.replaceAll("\\(", " ");
nom = nom.replaceAll("\\)", " ");
nom = nom.replaceAll("\\s", "\\|");
String[] rawSplit = nom.split("\\|");
Il faut également savoir que la colonne nom possède des nom composé (02_Jean-pierre) et seulement cette colonne (pas dans une autre) car il s'agit d'un exemple ne prenant pas en compte les prénom composé.
Cordialement.
- Edité par Alistair Daniel 22 mai 2019 à 10:12:42
J'avais pensé a une solution un peu chiant qui consistais a écrire dans une String lettre par lettre en commençant de la fin et après retourné la String...
mais en voulant te coder se petit truc j'ai trouver un meilleur solution, en plus je t'ai déjà écrit cette petite fonction, tu n'a plus qu'a la comprendre et l'adapter ^^.
public static ArrayList<String> fonction (String entrer){
ArrayList<String> lst = new ArrayList<String> ();
for(int i = 0; i < 3;i++) { //ta boucle qui compte le combre de variable
for(int j = entrer.length()-1; j > 0; j--) { //boucle qui commence par la fin de ta String
if(entrer.substring(j,j+1).charAt(0) == '-') {
lst.add(entrer.substring(j+1)); //on ajoute a la liste
entrer = entrer.substring(0,j); // et supprime de la variable
break; //on casse la boucle pour effectuer le décompte
}
}
}
lst.add(entrer.substring(0)); //on ajoute la dernière, le nom qui soit composé ou non
return lst;
}
Voilà ^^, donc juste la liste te retournera tes information dans l'autre sens : Anglais(Titulaire), Interne, Axel, 02_Jean-pierre
je n'ai pas coder la partie pour récupérer se qui a entre parenthèse, je pense que tu devrai y arrivé, sinon reviens me voir.
Alors, pour faire court, on part d'une boucle qui va parcourir seulement les 3 mot en partant de la fin, a l’intérieur de cette boucle se trouve une autre boucle qui parcours en partant de la fin la variable passer en paramètre jusqu’à tomber sur un "-", et a se moment la il va ajouter a la liste tout se qui a après se tiret, puis il le supprime afin de ne pas retomber dessus, et je casse la boucle afin de faire l'incrémentation de la boucle d'avant. A la fin il ne reste plus qu'a ajouter se qui reste c'est a dire le nom qu'il soit composé ou non.
Voilà, j’espère que mes explication n'on pas été trop confuse, tu peux toujours remplacer ArrayList par une liste normal.
Problème Base de données Java
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Site personnel : Julien Gidel - AutoMate - PHPresentation