2016-08-25 5 views
0

与えられた文字列のすべての単語に接頭辞を付けたいと思います。私のコードは次のとおりです。 -与えられた文字列の各単語に接頭辞を追加する方法

StringBuilder strColsToReturns = new StringBuilder(); 
String strPrefix    = "abc."; 
strColsToReturns.append(String.format(" %sId, %sname, %stype,", strPrefix, strPrefix, strPrefix)); 

これは、小さな文字列のため、細かいですが、私はこのような非常に大きな静的な文字列を持っています。だから、文字列接頭辞を追加するこの方法は面倒な方法のように見えます。これを達成する他の洗練された方法はありますか?

+3

[] '文字列の各単語を入れて'し、各要素の前に付けるために、そのリストを反復処理しますか? –

+1

Java 8はStringJoinerを導入しました。ここでは接頭辞を追加できます。それを見ましたか? – MrSimpleMind

+0

@MrSimpleMindしかし、そのプレフィックスは、* first *要素の前にのみ追加され、*すべての*要素の前には追加されません。 – Pshemo

答えて

4

replaceAll(regex, replacement)を使用できます。正規表現として、我々はそれの後

  • それの前にスペースや文字列の先頭
  • と非スペースを持っている場所を選択することもできます。このようなものが動作するはず

(ここではlook-aroundメカニズムを使用することができます)

ので:

String replaced = originalString.replaceAll("(?<=\\s|^)(?=\\S)", "abc."); 

しかしreplacementは、あなたが\でそれらをエスケープする必要があります$または\文字を含めることができる場合、またはMatcher.quoteReplacement(replacement)メソッドを使用します。

String originalString = "foo bar baz"; 
String replaced = originalString.replaceAll("(?<=\\s|^)(?=\\S)", Matcher.quoteReplacement("abc.")); 
System.out.println(replaced); 

出力:abc.foo abc.bar abc.baz

+1

私は短い(?<!\\ S)(?= \\ S) "パターンを使用したいと思います。 –

+0

@WiktorStribiżewはい、これに対して+1ですが、IMOでは私たちが何をしているのかを明確にしているので、 '(?<!\\ S)'の代わりに '(?<= \\ s | ^)もっと混乱するかもしれません)。 – Pshemo

関連する問題