2017-08-06 13 views
1

私は文字列nba-west-teams blazersを持っていて、その文字列をnbaWestTeams blazersのような形式に変換したいと思っています。基本的には、すべてのダッシュを削除し、大文字の後の文字を大文字に置き換えたいとします。Java文字列のダッシュを削除し、ダッシュの後に文字を大文字にする

StringメソッドreplaceAllを使用してすべてのダッシュを削除できますが、ダッシュの後に文字を取得して大文字にするにはどうすればよいですか?

// Input 
String withDashes = "nba-west-teams blazers" 

String removeDashes = withDashes.replaceAll(....?) 

// Expected conversion 
String withoutDashes = "nbaWestTeams blazers" 
+0

おそらくMatcherのような高度な概念を使用する必要があります。 https://docs.oracle.com/javase/7/docs/api/java/util/regex/Matcher.html – ProgrammersBlock

+0

最初に* dashes *のすべてのインデックスを検索してから、大文字と小文字を区別した後、*ダッシュ*をすべて削除します。 ** regex **やそのようなものを使って、これをもっとエレガントにすることもできます。マニュアルパート 'String#indexOf'と' String#toUpperCase'は非常に役に立ちます。あるいは単にMatcher#find'(本質的に同じですがよりエレガントです)で 'Matcher'を使用するだけです。 – Zabuza

+0

ヒント:先行研究をしています;-) – GhostCat

答えて

1

indexOfとStringBuilderクラスのreplace方法をチェックしてください。 StringBuilderは、文字列の高速編集を可能にします。 終了したらtoStringを使用してください。

さらなるヘルプが必要な場合は、コメントをしてください。だから、それはあなたが分割することができますダッシュの後の最初のアルファベットをのmatchおよび上部アルファベットと一致

+0

問題を解決するためにこれらの関数をどの程度正確に使用して、理想的にはいくつかのコードを提供することができますか?この回答の長期的な価値を最大限に引き出すには、単にOPを正しい方向に向けるのではなく、質問に対する詳細な回答にする方が良いです。 – Dukeling

+0

もちろん、誰かが私の前でそれに答えるのでなければ、私は夕食後に完全なコードを提供します;) – Harald

+0

そして今あなたはすでに2つの素晴らしい答えを持っています。私はどちらも好きですが、あなたの文字列がこのような "foo-"のように見えないように注意してください;) – Harald

1

あなたはこの\-([a-z])のような正規表現でパターンを使用することができますスペースに文字列を入力し、https://github.com/google/guava/wiki/StringsExplained#caseformatを使用して、破線の部分文字列をラクダのケースストリングに変換します。

+0

'replaceFirst'はやや効率的ですが、本当に長い文字列の場合、おそらく[O(n) ](https://stackoverflow.com/a/45535380/1711796)の代わりにこのO(n^2)ソリューションを使用してください。 – Dukeling

+0

これは正しい@Dukelingありがとう私はすでに私の答えを編集し、最適化について私はあなたに同意する私は何かをより良くしようとします –

0

を置き換えます

String str = "nba-west-teams blazers"; 
String regex = "\\-([a-z])"; 
Pattern pattern = Pattern.compile(regex); 
Matcher matcher = pattern.matcher(str); 

while (matcher.find()) {             
    str = str.replaceFirst(matcher.group(), matcher.group(1).toUpperCase()); 
} 

System.out.println(str);//Output = nbaWestTeams blazers 

1

文字列を繰り返し処理できます。ハイフンが見つかった場合はハイフンをスキップし、次の文字を大文字に変換します。 StringBuilderを使用すると、次のように部分的な結果を保存できます。

public static String toCamelCase(String str) { 
    // if the last char is '-', lets set the length to length - 1 to avoid out of bounds 
    final int len = str.charAt(str.length() - 1) == '-' ? str.length() - 1 : str.length(); 
    StringBuilder builder = new StringBuilder(len); 

    for (int i = 0; i < len; ++i) { 
     char c = str.charAt(i); 
     if (c == '-') { 
      ++i; 
      builder.append(Character.toUpperCase(str.charAt(i))); 
     } else { 
      builder.append(c); 
     } 
    } 
    return builder.toString(); 
} 
関連する問題