2

私は持っていString str = "a_bcde_fghij_k"ます。

に変更したい"aBcdeFghijK"

文字がある場合_、次の文字は大文字に変更され、文字が削除されます_

これどうやってするの?

4

6 に答える 6

10

I suspect you'll need to just go through this character by character, building up the string as you go. For example:

public static String underscoreToCapital(String text) {
    // This will be a bit bigger than necessary, but that shouldn't matter.
    StringBuilder builder = new StringBuilder(text.length());
    boolean capitalizeNext = false;
    for (int i = 0; i < text.length(); i++) {
        char c = text.charAt(i);
        if (c == '_') {
            capitalizeNext = true;
        } else {
            builder.append(capitalizeNext ? Character.toUpperCase(c) : c);
            capitalizeNext = false;
        }
    }
    return builder.toString();
}
于 2013-07-16T08:40:07.427 に答える
4

正規表現だけではそれができません (いわば "touppercase" 演算子はありません)。

しかし、Guavaには次のような便利なユーティリティがありCaseFormatます。

String result = CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, str)

これは機能しますが、入力の形式は厳密ではありませんが、このように寛容です (最初の文字を大文字にしたい場合は、代わりに使用してください)。UPPER_UNDERSCORECaseFormatUPPER_CAMEL

または、絶対に正規表現を使用したい場合は、次を使用できますMatcher.appendReplacement(JavaDoc に良い例があります)。

public static final Pattern UNDERSCORE_FOLLOWED_BY_ANYTHING = Pattern
        .compile("_(.)");

public static String toUpperAfterUnderscore(String input) {
    Matcher m = UNDERSCORE_FOLLOWED_BY_ANYTHING.matcher(input);
    StringBuffer sb = new StringBuffer();
    while (m.find()) {
        m.appendReplacement(sb, m.group(1).toUpperCase());
    }
    m.appendTail(sb);
    return sb.toString();
}
于 2013-07-16T08:40:55.287 に答える
2

分割して試すこともできます。

String str = "a_bcde_fghij_k"
String result[] = str.split("_");
String newstr = result[0];
for (int i=1;i<result.length;i++) {
     char first = Character.toUpperCase(result[i].charAt(0));
     newstr = newstr + first + result[i].substring(1);
}
System.out.println(newstr);

split() は、重要だと思われる場合は正規表現を取ります。

于 2013-07-16T08:49:51.903 に答える
0

おそらくこのメソッドの実行をチェックする必要がありますが、これは別のアイデアかもしれません:

public String replaceAndUpper(String word) {
    int charToRemove = word.indexOf("_");
    while (charToRemove != -1) {
        String part1 = word.substring(0, charToRemove);
        String part2 = word.substring(charToRemove + 1);
        char upperChar = Character.toUpperCase(part2.charAt(0));
        word = part1 + String.valueOf(upperChar) + part2.substring(1);
        charToRemove = word.indexOf("_");
    }
    return word;
}
于 2013-07-16T08:57:40.883 に答える
0

正規表現を使用してすぐに実行できる方法はありませんが、正規表現を使用するとタスクが大幅に簡素化されると思います。

public static String underscoreToCapital(final String input) {
    String ret = input;
    final Matcher m = Pattern.compile("_([a-z])").matcher(input);
    while (m.find()) {
        final String found = m.group();
        final String toUppercase = m.group(1);
        ret = ret.replaceAll(found, toUppercase.toUpperCase());
    }
    return ret;
}
于 2013-07-16T08:51:02.200 に答える