2017-05-25 49 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

您可以在concat操作後刪除最後一個字符前的空格。

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

在技術上this is a test .是正確的,如果你的規則連接字符串之間的空間。如果你想要像句點和逗號這樣的語法符號沒有空間,你將不得不做一些正則表達式。此外,你真的不需要循環或StringBuilders:

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

類似的東西,其中第一的replaceAll()參數是一個包含所有你關心的符號有關的括號內

0

與常規正則表達式表達你可以找到標點符號,避免了過去的空白,例如,如果您有以下陣列:

{"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()); 

輸出:

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

嘗試這個Java 8版本:

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

輸出:

了::這是一個考驗。