Je souhaite si on me donne en parametre de ma methodepouvoir obtenirCode:"aDc bbb,ddd?e:fgh"
Donc en tenant compte des espaces et autres mettre en majuscule les premiers char.Code:"Adc Bbb,Ddd?E:Fgh"
Avez vous une solution?
Version imprimable
Je souhaite si on me donne en parametre de ma methodepouvoir obtenirCode:"aDc bbb,ddd?e:fgh"
Donc en tenant compte des espaces et autres mettre en majuscule les premiers char.Code:"Adc Bbb,Ddd?E:Fgh"
Avez vous une solution?
Humm, alors réponses instantanée : expression régulière.
Mais ça risque d'être vite incompréhensible, donc non maintenable.
Ce que tu peux faire de plus simple :
Et donc tes caractères spéciaux, ce sont les espace, les ?, etc bref tout ce qui doit déclencher de mettre une majuscule au caractère suivant.Code:
1
2
3
4
5
6
7
8
9 Pour chaque caractère Si tu trouves un caractère spécial* Mettre le flag majuscule à vrai Sinon Si flag majuscule à vrai Transformer la lettre en majuscule Fin si Fin si
Salut,
Pas forcément !
On peut simplement utiliser "\\b\\p{Ll}" pour rechercher ces premières lettres :
- \\b représente un séparateur de mot.
- \\p{Ll} représentre une lettre en minuscule ("Letter lowercase")
Après il suffit de faire un replaceAll() "à la main", car le replaceAll() originel est assez limité. Mais ce n'est pas bien méchant :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 public static String firstLetterUpperCase(String input) { // On recherche les premières lettres en minuscule : Pattern pattern = Pattern.compile("\\b\\p{Ll}"); Matcher matcher = pattern.matcher(input); // Si on trouve au moins un élément : if (matcher.find()) { // On doit construire une nouvelle chaine : StringBuffer sb = new StringBuffer(input.length()); do { // On effectue le remplacement : String replacement = matcher.group().toUpperCase(); matcher.appendReplacement(sb, Matcher.quoteReplacement(replacement)); } while (matcher.find()); matcher.appendTail(sb); return sb.toString(); } return input; }
a++
Bonjour,
Comment determinier qu'on retrouve un caractère special?
C'est à dire ?
a++
@Carhiboux
je pense que vous avez oublié d'initialiser le flag au début de la boucle.
voici un petit essai d’implémentation de l'algorithme de Carhiboux :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 public class Test { private static StringBuffer convert(String str) { boolean flag; String charSpecials = ";\":? ,"; StringBuffer buffer = new StringBuffer(""); for (int i = 0; i < str.length(); i++) { flag = false; buffer.append(str.charAt(i)); for (int j = 0; j < charSpecials.length(); j++) { if (str.charAt(i) == charSpecials.charAt(j)) { flag = true; break; } } if (flag == true) { if (i < str.length() - 1) { i++; } buffer.append(Character.toUpperCase(str.charAt(i))); } } buffer.deleteCharAt(buffer.length() - 1); return buffer; } public static void main(String[] args) { System.out.println(convert("\"aDc bbb,ddd?e:fgh\"")); } }
Hé, on est pas non plus là pour faire tes devoirs à ta place quand même...
A toi de te creuser un peu la tête.
@adissa357
Si vous avez bien compris l'algorithme, comment ça marche ? comment l’implémenter ? il vous sera d'une facilité évidente de modifier le code de sorte à ce que la méthode retourne String au lieu de StringBuffer.
par ailleurs, les règles du forum interdisent de donner la réponse de manière directe mais il suffit que je vous ai donné l’implémentation.
Merci resultat trouvé
Si c'est le cas, n'oubliez pas de mettre le sujet en résolu.Citation:
Merci resultat trouvé