Salut,
Envoyé par
srambo
j'ai une chaine de caractère en separant avec plusieurs lignes
Exemple:
1 2 3 4 5
| string notes =
'je mange du chocolat
les enfants sont a l'ecole
tout le monde travaille dure
il faut faire les courses'; |
D'abord, en Java, langage sensible à la casse, les majuscules et les minuscules ont leur importance. C'est la classe String, pas string.
Ensuite, une String dite littérale (la valeur si tu préfères) doit être entre double-quotes, pas simple quote qui est pour les char (caractère seul).
Enfin, on ne peut (pas encore) faire des chaînes sur plusieurs lignes comme ça. On appelle ça les blocs de text (text blocks). On en a parlé pour Java 13 (c'est dedans en expérimental). Peut-être en Java 14, mais ce n'est pas vraiment sûr (pas confirmé en tout cas). Espérons qu'en Java 15... en attendant, il faut soit définir la chaîne sur une ligne, avec des \n pour passer à la ligne, soit la découper en morceau et réassembler par concaténation.
1 2 3 4 5
| String notes =
"je mange du chocolat\n"+
"les enfants sont a l'ecole\n"+
"tout le monde travaille dure\n"+
"il faut faire les courses"; |
On peut faire aussi, pour éviter les + :
1 2 3 4 5
| String notes = String.join("\n", // un caractère qui sépare les lignes
"je mange du chocolat",
"les enfants sont a l'ecole",
"tout le monde travaille dure",
"il faut faire les courses"); |
Envoyé par
srambo
comment je vais faire parcourir dans Java pour lire chaque caractere dans la chaine dans un boucle?
1 2 3
| for(int i=0; i<notes.length(); i++) {
char c = notes.charAt(i);
} |
ou encore, si on n'a pas besoin de la position i de chaque caractère dans la chaîne :
1 2 3
| for(char c : notes.toCharArray()) {
} |
ou encore
1 2 3
| notes.chars().forEach(ic-> {
char c = (char)ic;
}); |
Mais attention, on aura les "\n" dans les différents caractères obtenus.
On peut les filtrer (avec un test) :
1 2 3 4 5 6
| for(int i=0; i<notes.length(); i++) {
char c = notes.charAt(i);
if ( c!='\n' ) {
// ... tous les caractères sauf \n
}
} |
1 2 3
| notes.chars().filter(ic-> ic!='\n').forEach(ic-> {
char c = (char)ic;
}); |
On peut aussi utiliser un tableau de chaînes :
1 2 3 4 5
| String[] notes = {
"je mange du chocolat",
"les enfants sont a l'ecole",
"tout le monde travaille dure",
"il faut faire les courses"}; |
Ceci permet de garder la notion de ligne, mais sans avoir de \n.
Pour afficher chaque ligne à ligne :
1 2 3
| for(String line : notes) {
System.out.println(line);
} |
ou
Arrays.stream(notes).forEach(System.out::println);
Et pour le parcours dans un for :
1 2 3 4 5
| for(String line : notes) {
for(int i=0; i<line.length(); i++) {
char c = line.charAt(i);
}
} |
Pour avoir la taille totale :
int longueurTotale = Arrays.stream(notes).mapToInt(String::length).sum();
Envoyé par
srambo
J'arrive juste à lire la première ligne mais pour continuer le precedent au a la prochaine ligne on fait comment?
C'est étrange ce que tu dis. Pas avec le code que tu montres, qui ne compile pas. Tu es sûr qu'on parle bien de Java.
En JavaScript, ECMA6, on peut faire des blocs de texte, il me semble, comme ça :
1 2 3 4
| notes = `je mange du chocolat
les enfants sont a l'ecole
tout le monde travaille dure
il faut faire les courses`; |
mais pas de string devant.
Pour en revenir au blocs de texte, justement, en Java, on peut les essayer en activant l'option --enable-preview du compilateur.
Du coup on peut faire (attention, il n'y a aucune garantie que la syntaxe ne va pas changer) :
1 2 3 4 5 6
| String notes = """
je mange du chocolat
les enfants sont a l'ecole
tout le monde travaille dure
il faut faire les courses
"""; |
On obtient exactement la même chose que :
1 2 3 4 5
| String notes = String.join("\n", // un caractère qui sépare les lignes
"je mange du chocolat",
"les enfants sont a l'ecole",
"tout le monde travaille dure",
"il faut faire les courses"); |
Dans les deux cas, on peut retrouver chaque ligne en utilisant un split par \n qui va découper la chaîne et va donner un tableau de chaînes:
1 2 3 4
| for(String line : notes.split("\n")) {
for(char c : line.toCharArray()) {
}
} |
Partager