2017-05-25 8 views
-5
String[] str = {"this", "is", "a", "test", "."} 

は私が出力したい:この文字列を正しく連結する方法は?

"this is a test." 

StringBuilder sb = new StringBuilder(); 
for(int i=0; i<str.length; i++){ 
    sb.append(str[i] + " "); 
} 

しかし、この意志の出力は: "これはテストです。"。どのように正しくドットの前にスペースを避けるために?

+3

もっと一般的なルールが必要だと思います。あなたはどんな厳しい状況の下でスペースを必要としませんか?次の配列要素が厳密に ''。 – ruakh

+0

最後の文字のような一般的な条件が必要であると仮定します。 –

+0

はい。いくつかの句読点。 – user697911

答えて

0

私はJavaの開発者ではないんだけど、ここでは最初か最後の項目については(任意の構文違反のため申し訳ありません)迅速&汚い

StringBuilder sb = new StringBuilder(); 
for(int i=0; i<str.length; i++){ 
    if(i==str.length-1 || i==0){ 
    sb.append(str[i]); 
    }else{ 
    sb.append(" "+str[i]); 
    } 
} 

だ、単なる文字列に値を追加そうでない場合は、スペースと値を追加します。

+0

このようなものが最高です。 – user697911

+0

うれしい私は助けることができました! – admcfajn

0
public String generateSentence(String[] str) { 
    StringBuilder builder = new StringBuilder(str[0]); 
    for (String word: str) { 
     if (word.equals(".")) { 
      builder.append(word); 
     } else { 
      builder.append(" ").append(word); 
     } 
    } 
    return builder.toString(); 
} 
+0

これは私が知っている境界のインデックスを作成するでしょう – user697911

+0

。あなたは私より速く入力したので、時間内に更新することはできませんでした。 – TheTechWolf

+0

私はこれよりも良い方法があることを覚えています。何らかの特殊文字を追加するトークンの前にスペースを追加する – user697911

1

連動操作後の最後の文字の前のスペースを削除することができます。

public static void main(String[] args) { 
    String[] str = {"this", "is", "a", "test", "."}; 

    StringBuilder sb = new StringBuilder(); 
    for(int i = 0; i < str.length; i++){ 
     sb.append(str[i] + " "); 
    } 
    sb.deleteCharAt(sb.length() - 3); 
    System.out.println(sb); 
} 
0

技術的には、ルールが文字列を間にスペースで連結している場合は正しくなります。ピリオドやカンマのような文法上の記号にスペースを持たせたくない場合は、正規表現を行う必要があります。最初でReplaceAll()の引数はあなたが定期的にして括弧内に

0

を気にすべてのシンボルを含む正規表現であるような

String[] array = new String[] { "this", "is", "a", "test", "." }; 
String joined = String.join(" ", array); 
joined = joined.replaceAll(" ([.,])", "$1"); 

何か、:また、あなたは本当にループまたはStringBuildersを必要としませんあなたは次の配列があればあなたは句読点を見つけ、最後の空白を避けることができる表現は、例えば、:だから

{"this", "is", "a", "test", ".", "and", "this", "is", "another", 
"test", ";", "here", "is", "one", "test", "more", "!"}; 

を、あなたがこの方法で実装できます

private static String regex = "[.!;?\\-]"; 

String[] str = {"this", "is", "a", "test", ".", "and", "this", "is", 
     "another", "test", ";", "here", "is", "one", "test", "more", "!"}; 

StringBuilder sb = new StringBuilder(); 

for (int i = 0; i < str.length; i++) { 
    if (str[i].matches(regex)) { 
     sb.deleteCharAt(sb.length() - 1); 
    } 
    sb.append(str[i] + " "); 
} 
System.out.println(sb.toString()); 

出力:

 String[] str = {"this", "is", "a", "test", "."}; 
    String test = Arrays.stream(str).reduce(new String(), (p,q) -> p+" "+q).replace(" .", "."); 
    System.out.println("out ::" + test); 

出力:

this is a test. and this is another test; here is one test more! 
0

8バージョンこのJavaを試してみてください

アウト::これはテストです。

関連する問題