4

次のような文字列があります。

CALDARI_STARSHIP_ENGINEERING

次のように編集する必要があります

Caldari Starship Engineering

残念ながら、今は午前 3 時ですが、私は一生これを理解することはできません。私はいつも文字列内のものを置き換えるのに苦労していたので、どんな助けも素晴らしいものであり、将来これを行う方法を理解するのに役立ちます.

4

5 に答える 5

9

このようなものは簡単です:

    String text = "CALDARI_STARSHIP_ENGINEERING";
    text = text.replace("_", " ");
    StringBuilder out = new StringBuilder();
    for (String s : text.split("\\b")) {
        if (!s.isEmpty()) {
            out.append(s.substring(0, 1) + s.substring(1).toLowerCase());
        }
    }
    System.out.println("[" + out.toString() + "]");
    // prints "[Caldari Starship Engineering]"

これsplitは単語境界アンカーにあります。

こちらもご覧ください


Matcherループ ソリューション

を使用してもかまわない場合は、次のように loop をStringBuffer使用することもできます。Matcher.appendReplacement/Tail

    String text = "CALDARI_STARSHIP_ENGINEERING";
    text = text.replace("_", " ");

    Matcher m = Pattern.compile("(?<=\\b\\w)\\w+").matcher(text);
    StringBuffer sb = new StringBuffer();
    while (m.find()) {
        m.appendReplacement(sb, m.group().toLowerCase());
    }
    m.appendTail(sb);
    System.out.println("[" + sb.toString() + "]");
    // prints "[Caldari Starship Engineering]"

正規表現は、アサーションを使用して、単語の「末尾」部分 (小文字にする必要がある部分) と一致させます。後ろ(?<=...)を見て、単語の境界の\b後に単語の文字が続くことを確認し\wます。残り\w+は小文字にできるように一致させる必要があります。

関連する質問

于 2010-05-16T08:30:26.067 に答える
4

これを試すことができます:

String originalString = "CALDARI_STARSHIP_ENGINEERING";
String newString =
    WordUtils.capitalize(originalString.replace('_', ' ').toLowerCase());

WordUtilsCommons Lang ライブラリの一部です ( http://commons.apache.org/lang/ )

于 2010-05-16T08:03:41.297 に答える
1

正規表現の使用:

String s = "CALDARI_STARSHIP_ENGINEERING";
StringBuilder camel = new StringBuilder();
Matcher m = Pattern.compile("([^_])([^_]*)").matcher(s);
while (m.find())
    camel.append(m.group(1)).append(m.group(2).toLowerCase());
于 2010-05-17T07:48:09.497 に答える
0

テストされていませんが、それは私が少し前に同じことを実装した方法です:

s = "CALDARI_STARSHIP_ENGINEERING";
StringBuilder b = new StringBuilder();
boolean upper = true;
for(char c : s.toCharArray()) {
    if( upper ) {
        b.append(c);
        upper = false;
    } else if( c = '_' ) {
        b.append(" ");
        upper = true;
    } else {
        b.append(Character.toLowerCase(c));
    }
}
s = b.toString();

EVE ライセンス契約では、キャリアに役立つ外部ツールの作成が禁止されている可能性があることに注意してください。また、EVE のほとんどは Python で書かれているため、Python を学ぶきっかけになるかもしれません :)。

于 2010-05-16T08:01:40.270 に答える
0

手っ取り早い方法:

すべて小文字

   line.toLowerCase();

単語に分割:

   String[] words = line.split("_");

次に、最初の文字を大文字にして単語をループします。

  words[i].substring(0, 1).toUpperCase() 
于 2010-05-16T08:03:42.813 に答える