2008-10-30 8 views
1

Ce qui serait une implémentation simple d'une méthode pour convertir une chaîne comme "Bonjour à tous" en "helloThereEveryone". En Java, la prise en charge des opérations de l'utilitaire String et StringBuffer est assez limitée.JavaME: Convertir chaîne en camelCase

Répondre

3

mise en œuvre rapide primitive. Je ne sais pas de restrictions de J2ME, donc je l'espère s'intègre ou lui donne quelques idées ...

String str = "Hello, there, everyone?"; 

StringBuffer result = new StringBuffer(str.length()); 
String strl = str.toLowerCase(); 
boolean bMustCapitalize = false; 
for (int i = 0; i < strl.length(); i++) 
{ 
    char c = strl.charAt(i); 
    if (c >= 'a' && c <= 'z') 
    { 
    if (bMustCapitalize) 
    { 
     result.append(strl.substring(i, i+1).toUpperCase()); 
     bMustCapitalize = false; 
    } 
    else 
    { 
     result.append(c); 
    } 
    } 
    else 
    { 
    bMustCapitalize = true; 
    } 
} 
System.out.println(result); 

Vous pouvez remplacer les majuscules alambiquée append avec:

result.append((char) (c - 0x20)); 

bien qu'il puisse sembler plus hackish.

+1

Bonne solution, merci! – Ciryon

+0

Certaines implémentations J2ME ont des extensions pour les jeux de caractères alternatifs. Si cela est un problème, vous devez vraiment suivre les recommandations de la plate-forme pour l'assemblage, de sorte que l'astuce char math ne fonctionnera pas sur ces jeux de caractères. –

+0

Je suggère d'éviter de créer de nouvelles chaînes ici result.append (strl.substring (i, i + 1) .toUpperCase()); Et utilisez result.append (Character.toUpperCase (c)); à la place – user655419

0

Suggestion:

Peut être si vous pouvez port one regexp library on J2ME, vous pouvez l'utiliser pour enlever les espaces dans votre chaîne ...

+0

Bonne suggestion, mais problématique en raison de problèmes de licence. – Ciryon

+0

N'effectuera pas l'opération camel-case, cependant. –

1

Avec CDC, vous avez:

String.getBytes(); // pour convertir la chaîne en un tableau d'octets String.indexOf (int ch); // pour localiser le début des mots String.trim(); // pour supprimer les espaces

Pour moins/majuscules, vous devez ajouter (soustrayez) 32.

Avec ces éléments, vous pouvez construire votre propre méthode.

-2

je le ferais comme ceci:

private String toCamelCase(String s) { 
    StringBuffer sb = new StringBuffer(); 
    String[] x = s.replaceAll("[^A-Za-z]", " ").replaceAll("\\s+", " ") 
      .trim().split(" "); 

    for (int i = 0; i < x.length; i++) { 
     if (i == 0) { 
      x[i] = x[i].toLowerCase(); 
     } else { 
      String r = x[i].substring(1); 
      x[i] = String.valueOf(x[i].charAt(0)).toUpperCase() + r; 

     } 
     sb.append(x[i]); 
    } 
    return sb.toString(); 
} 
-2

Cocher cette

import org.apache.commons.lang.WordUtils; 

String camel = WordUtils.capitalizeFully('I WANT TO BE A CAMEL', new char[]{' '}); 

return camel.replaceAll(" ", ""); 
+1

Expliquer votre code aiderait OP et éventuellement vous. –

-1

Je suggère le code simple suivant:

String camelCased = ""; 
    String[] tokens = inputString.split("\\s"); 
    for (int i = 0; i < tokens.length; i++) { 
     String token = tokens[i]; 
     camelCased = camelCased + token.substring(0, 1).toUpperCase() + token.substring(1, token.length()); 
    } 
    return camelCased; 
+0

Pourquoi la downvote? –

+0

@AustinHenley - Je pense que cela ne fonctionne pas. Et si vous aviez AIR FOIL en entrée? Quelle serait la sortie? D'après mes lectures, ce serait AIRFOIL. Ce qui semble faux. – Cheeso

1
private static String toCamelCase(String s) { 
    String result = ""; 
    String[] tokens = s.split("_"); // or whatever the divider is 
    for (int i = 0, L = tokens.length; i<L; i++) { 
     String token = tokens[i]; 
     if (i==0) result = token.toLowerCase(); 
     else 
      result += token.substring(0, 1).toUpperCase() + 
       token.substring(1, token.length()).toLowerCase(); 
    } 
    return result; 
} 
0

Essayez le code suivant

public static String toCamel(String str) { 
    String rtn = str; 
    rtn = rtn.toLowerCase(); 
    Matcher m = Pattern.compile("_([a-z]{1})").matcher(rtn); 
    StringBuffer sb = new StringBuffer(); 
    while (m.find()) { 
     m.appendReplacement(sb, m.group(1).toUpperCase()); 
    } 
    m.appendTail(sb); 
    rtn = sb.toString(); 
    return rtn; 
}