5

FirstNameに変換する方法を知っている人は誰でもFirst Name

分割は大文字に基づいて行う必要がありますが、最初の文字は除外する必要があります。

分割を使用してそれを行う方法を知っています。分割機能以外にそれを行う方法は他にもあります。

4

4 に答える 4

5

そうではなくsplit、ただreplaceAll:

str.replaceAll("(?!^)([A-Z])", " $1")

この解決策は、大文字の英語のアルファベットが文字列の最初の文字である場合、その前にスペースを追加したくないことを前提としています。したがって、" FirstName"になります"  First Name"(2 つのスペースに注意してください)。

(?!^)(?!pattern)これをチェックするだけでは文字列の先頭ではありません^(pattern)大文字の英語のアルファベットをキャプチャし、キャプチャしたテキストを置換で使用します$1($1つまり、キャプチャ グループ1でキャプチャされたものはすべて置換文字列に入れられます。この場合、キャプチャ グループは 1 つしかありません)。

小文字の英語のアルファベットが前にある場合にのみ、大文字の英語のアルファベットの前にスペースを追加する別のソリューション:

str.replaceAll("(?<=[a-z])([A-Z])", " $1")

(?<=[a-z])大文字の前に英小文字の alphabet が(?<=pattern)あるかどうかをチェックする肯定的な後読みです。残りは上記で説明しました。[A-Z][a-z]

パターンは、要件に応じて大きく異なります。具体的な要件の代わりに 1 つの例を提供するだけなので、私は大雑把な推測をして、パターンを選択します。

于 2013-02-12T07:04:32.493 に答える
4

replaceAll よりも 6 ~ 11 倍高速です。

  StringBuilder s = new StringBuilder( "FirstName" );
  for( int i = 1; i < s.length(); ++i ) {
     if( Character.isUpperCase( s.charAt( i ))) {
        s.insert( i++, ' ' );
     }
  }

ベンチ :

  long atStart = System.currentTimeMillis();
  for( int j = 0; j < 1000000; ++j ) {
     StringBuilder s = new StringBuilder( "FirstName" );
     for( int i = 1; i < s.length(); ++i ) {
        if( Character.isUpperCase( s.charAt( i ))) {
           s.insert( i++, ' ' );
        }
     }
  }
  long elapsed1 = System.currentTimeMillis() - atStart;

  atStart = System.currentTimeMillis();
  for( int j = 0; j < 1000000; ++j ) {
     String s = "FirstName";
     s = s.replaceAll("(?!^)([A-Z])", " $1");
  }
  long elapsed2 = System.currentTimeMillis() - atStart;

  System.err.println( "Ratio: " + elapsed2 / (double)elapsed1 );
于 2013-02-12T07:06:32.437 に答える
0

以下のコードスナップを使用できます

   String array[]= "FirstMiddleLast".replaceAll("(?!^)([A-Z])", " $1").split(" ");
   for(String name:array){
      System.out.println(name);
   }
于 2014-06-30T06:26:47.393 に答える
-1

次のような独自のものを作成できます。

private String split(String string) {
    StringBuffer sb = new StringBuffer();
    for (Character character: string.toCharArray()) {
        if (Character.isUpperCase(character)) {
            sb.append(" ");
        }
        sb.append(character);
    }
    return sb.toString().trim();
}
于 2013-02-12T07:07:46.800 に答える