2017-12-11 9 views
1

私の目標は、大文字の間の大文字の間のスペースを大文字の書式付き文字列に導入することです。例: ThisIsATest - >これはテストですregexで置き換えられた参照文字

現在、私は、このタスクを解決するためにString.replaceAll(正規表現、交換)を使用する方法もある場合、私は疑問に思って

public static String addSpacesBetweenCapitalLetters(String input) { 
    StringBuilder sb = new StringBuilder(); 

    for(char c : input.toCharArray()) { 
     sb.append(Character.isUpperCase(c) ? " "+c : c); 
    } 

    if(sb.codePointAt(0)==new Character(' ')) { 
     sb.deleteCharAt(0); 
    } 
    return sb.toString(); 
} 

この関数を呼び出すことによってこれを行います。キャッチャーは簡単にregexを使って見つけることができます。置き換えられた文字を次のコードと同様に参照できますか?

input.replaceAll("[A-Z]"," "+&foundChar); 
+1

を大文字を持っていると主張して先読み。正規表現を使用するアルゴリズムを使用する場合は、解決すべき2つの問題があります。 – TinkerTenorSoftwareGuy

+0

オリジナルのプログラムは理解して維持しやすいです。正規表現の解決法(答えを参照)は、それが何をしているかを見つけるために集中的な研究を必要とします。 – Henry

+1

@Henryこの問題については、それは簡単かもしれませんが、将来の可能なタスクが可能かどうかを知りたいと思います。私は正規表現を使用しなければならない場合、私は決して興奮することはありませんが、たぶんそれは便利な場合があります – John

答えて

3

あなたはこのregex based on lookaroundsを使用することができます。

str = str.replaceAll("(?<=\\p{L})(?=\\p{Lu})", " "); 

RegEx Demo

正規表現の分裂:

  • (?<=\p{L}):後方参照は、私たちは前の位置でどのような場合でも文字を持っていると主張します
  • (?=\p{Lu}):あなたは、アルゴリズムを持っているとき、あなたが解決する問題があり、プログラミングの世界で言われているとおり、我々は次の位置に
+1

それは迅速にありがとうございました。私は見回りを知らなかった、実際には彼らについて聞いたこともない。期待されたように、今日新しいことを学んだ何か:-)。 – John

+1

正規表現の部分についての良い説明 – TinkerTenorSoftwareGuy

+1

@ John:この優れたチュートリアルをご覧ください。https://www.regular-expressions.info/lookaround.html – anubhava

関連する問題