Cancatener deux tableaux de chaine de caractere en utilisants les lists et strea
Résolu
Seifou43
Messages postés
7
Date d'inscription
Statut
Membre
Dernière intervention
-
Seifou43 Messages postés 7 Date d'inscription Statut Membre Dernière intervention -
Seifou43 Messages postés 7 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Cancatener deux tableaux de chaine de caractere en utilisants les lists et strea
- Caractère ascii - Guide
- Caractère spéciaux - Guide
- Caractere speciaux - Guide
- Fusionner deux tableaux excel - Guide
- Chaine tnt gratuite sur mobile - Guide
3 réponses
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());
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
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] + "."); } } } }