Cancatener deux tableaux de chaine de caractere en utilisants les lists et strea
Résolu/Fermé
Seifou43
Messages postés
7
Date d'inscription
jeudi 2 juillet 2020
Statut
Membre
Dernière intervention
15 août 2020
-
11 août 2020 à 18:39
Seifou43 Messages postés 7 Date d'inscription jeudi 2 juillet 2020 Statut Membre Dernière intervention 15 août 2020 - 15 août 2020 à 15:42
Seifou43 Messages postés 7 Date d'inscription jeudi 2 juillet 2020 Statut Membre Dernière intervention 15 août 2020 - 15 août 2020 à 15:42
A voir également:
- Cancatener deux tableaux de chaine de caractere en utilisants les lists et strea
- Caractère ascii - Guide
- Caractere speciaux - Guide
- Caractère spéciaux - Guide
- Fusionner deux tableaux excel - Guide
- Caractère spéciaux mac clavier - Guide
3 réponses
KX
Messages postés
16734
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
24 avril 2024
3 015
Modifié le 11 août 2020 à 20:04
Modifié le 11 août 2020 à 20:04
Bonjour,
Je vais commencer par répondre à la question que tu as posé, "est ce qu'il y a une possibilité de faire une concaténation de deux tableaux de chaine de caractère en utilisant les streams?"
Oui, évidemment, on peut concaténer des Stream avec la méthode Stream.concat(Stream,Stream).
Exemple :
Toutefois, je ne suis pas sûr que ce soit vraiment ce que tu cherches à faire, ton code est assez confus, il faudrait un exemple pour bien comprendre, en particulier le rôle de ton AtomicReference qui introduit des effets de bords qui ne devrait pas exister dans un Stream.
Tu peux essayer ce code et voir ce qu'il te manque pour faire ce que tu veux :
Je vais commencer par répondre à la question que tu as posé, "est ce qu'il y a une possibilité de faire une concaténation de deux tableaux de chaine de caractère en utilisant les streams?"
Oui, évidemment, on peut concaténer des Stream avec la méthode Stream.concat(Stream,Stream).
Exemple :
Stream.concat( Stream.of("a1", "b1", "c1"), Stream.of("a2", "b2", "c2") ).forEach(System.out::println);
Toutefois, je ne suis pas sûr que ce soit vraiment ce que tu cherches à faire, ton code est assez confus, il faudrait un exemple pour bien comprendre, en particulier le rôle de ton AtomicReference qui introduit des effets de bords qui ne devrait pas exister dans un Stream.
Tu peux essayer ce code et voir ce qu'il te manque pour faire ce que tu veux :
JTextArea textArea = new JTextArea(); Stream.concat(Files.lines(Paths.get("C:/test1.txt")), Files.lines(Paths.get("C:/test2.txt"))) .map(line -> line.split("\\s+")) .filter(parts -> parts[0].isEmpty() || parts[0].startsWith("A-")) .map(parts -> Arrays.stream(parts) .collect(Collectors.joining(",", "data=", "\n"))) .forEach(textArea::append); System.out.println(textArea.getText());
Seifou43
Messages postés
7
Date d'inscription
jeudi 2 juillet 2020
Statut
Membre
Dernière intervention
15 août 2020
Modifié le 12 août 2020 à 18:06
Modifié le 12 août 2020 à 18:06
salut KX:
merci pour votre réponse .
je vais changer mon code et je vais mettre un exemple simplifier de mes deux fichiers
le fichier 1:
le fichier 2
je cherche à avoir ceci :
mon premier code marche si les deux fichiers sont séparer .
j'ai introduit AtomicReference parce que dans le fichier 1 la premiere collone parfois elle contiennes des lignes vides.sous ( A-0 ou A-20). voir fichier fichier1.
Nb: l'exécution se fait mais elle m’affiche l'erreur suivante :
maintennant le nouveau code sera
merci
merci pour votre réponse .
je vais changer mon code et je vais mettre un exemple simplifier de mes deux fichiers
le fichier 1:
START
ELEMENT
G1 G2 G3
A-0 FX 0
FX 1
A-20 FY 0
FY 1
END
le fichier 2
DATA
VRRP
G1 G4 G5 G6
A-0 2 B24 96
P2 P3
NO
G1 G4 G5 G6
A-20 5 C52 96
P2 P3
NO
END
je cherche à avoir ceci :
!!!!!!!!!!! DATA1 !!!!!!!!!!
get=A-0, mget=FX, mget=0.
get=A-0, mget=FX, mget=1.
Set=A-0.
get=A-20, mget=FY, mget=0.
get=A-20, mget=FY, mget=1.
Set=A-20.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!! DATA2!!!!!!!!!
def=A-0 , get=2 ,mget=B24.
def=A-0 .
def=A-20 ,get=5 ,mget=C52.
def=A-20.
mon premier code marche si les deux fichiers sont séparer .
j'ai introduit AtomicReference parce que dans le fichier 1 la premiere collone parfois elle contiennes des lignes vides.sous ( A-0 ou A-20). voir fichier fichier1.
Nb: l'exécution se fait mais elle m’affiche l'erreur suivante :
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0 at prog1.alfa1$2.lambda$1(alfa1.java:11)
maintennant le nouveau code sera
Button button = new Button("RUN"); button.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent arg0) { try { Stream.concat(Files.lines(Paths.get("C:/FILE1.txt")), Files.lines(Paths.get("C:/FILE2.txt"))) .map(line -> line.split("\\s+")) .filter(parts -> parts[0].isEmpty() || parts[0].startsWith("A-")) // .map(parts -> Arrays.stream(parts).collect(Collectors.joining(",", "get=","mget=","mget=", "\n"))) // .map(parts -> Arrays.stream(parts).collect(Collectors.joining(",", "Set=", "\n"))) // .map(parts -> Arrays.stream(parts).collect(Collectors.joining(",", "def=","get=","mget=", "\n"))) // .map(parts -> Arrays.stream(parts).collect(Collectors.joining(",", "def=", "\n"))) .forEach(textArea::append); } catch (IOException e) { e.printStackTrace(); } System.out.println(textArea.getText()); } });
merci
KX
Messages postés
16734
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
24 avril 2024
3 015
12 août 2020 à 18:51
12 août 2020 à 18:51
Je ne pense pas que les Stream te seront d'une grande aide ici, il faut revenir à des choses plus basiques.
Voici un exemple vite fait :
Voici un exemple vite fait :
String group = null; System.out.println("!!!!!!!!!! DATA1 !!!!!!!!!!"); for (String line : Files.readAllLines(Paths.get("C:/File1.txt"))) { if (line.trim().isEmpty()) continue; if (group != null) { if (line.startsWith("A-") || line.startsWith("END")) { System.out.println("Set=" + group + "."); group = null; } else { String[] tab = line.trim().split("\\s+"); if (tab.length == 2) { System.out.println("get=" + group + ", mget=" + tab[0] + ", mget=" + tab[1] + "."); } } } if (group == null) { if (line.startsWith("A-")) { String[] tab = line.trim().split("\\s+"); if (tab.length == 3) { group = tab[0]; System.out.println("get=" + group + ", mget=" + tab[1] + ", mget=" + tab[2] + "."); } } } } System.out.println("!!!!!!!!!! DATA2 !!!!!!!!!!"); for (String line : Files.readAllLines(Paths.get("C:/File2.txt"))) { if (line.trim().isEmpty()) continue; if (group != null) { if (line.startsWith("A-") || line.startsWith("END")) { System.out.println("def=" + group + "."); group = null; } else { String[] tab = line.trim().split("\\s+"); if (tab.length == 3) { System.out.println("def=" + group + ", get=" + tab[0] + ", mget=" + tab[1] + "."); } } } if (group == null) { if (line.startsWith("A-")) { String[] tab = line.trim().split("\\s+"); if (tab.length == 4) { group = tab[0]; System.out.println("get=" + group + ", get=" + tab[1] + ", mget=" + tab[2] + "."); } } } }
Seifou43
Messages postés
7
Date d'inscription
jeudi 2 juillet 2020
Statut
Membre
Dernière intervention
15 août 2020
15 août 2020 à 15:42
15 août 2020 à 15:42
salut kx:
j'ai modifier le programme et ça marche bien merci beaucoup pour votre support et assistance
j'ai modifier le programme et ça marche bien merci beaucoup pour votre support et assistance