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] + " ");
}
然而,這將輸出: 「這是一個考驗。」如何正確避免點之前的空間?
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] + " ");
}
然而,這將輸出: 「這是一個考驗。」如何正確避免點之前的空間?
我不是一個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]);
}
}
對於第一個或最後一個項目,只需將值添加到字符串,否則增加一個空格和值。
這樣的事情是最好的。 – user697911
很高興能幫到你! – admcfajn
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();
}
這將創建索引超出我知道的界限 – user697911
。你輸入的速度比我快,所以我沒有及時更新它。 – TheTechWolf
我記得有一個比這更好的方法。以某種方式在要添加的令牌之前添加空間,並以一些特殊字符爲條件 – user697911
您可以在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);
}
在技術上this is a test .
是正確的,如果你的規則連接字符串之間的空間。如果你想要像句點和逗號這樣的語法符號沒有空間,你將不得不做一些正則表達式。此外,你真的不需要循環或StringBuilders:
String[] array = new String[] { "this", "is", "a", "test", "." };
String joined = String.join(" ", array);
joined = joined.replaceAll(" ([.,])", "$1");
類似的東西,其中第一的replaceAll()參數是一個包含所有你關心的符號有關的括號內
與常規正則表達式表達你可以找到標點符號,避免了過去的空白,例如,如果您有以下陣列:
{"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!
嘗試這個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);
輸出:
了::這是一個考驗。
我想我們在這裏需要一個更一般的規則。在什麼情況下你不需要空間?只有當下一個數組元素正好是'「。」「? – ruakh
假設我們需要像最後一個字符一樣的一般條件不需要空間。 –
是的。一些標點符號。 – user697911