如何正确连接这个字符串?

时间:2017-05-25 23:37:38

标签: java

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] + " ");
}

然而,这将输出:“这是一个测试。”如何正确避开点之前的空间?

6 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分: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();
}

答案 2 :(得分:0)

我不是一个java开发人员,但这里是快速的&amp;脏(抱歉任何语法违规)

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]);
  }
}

对于第一个或最后一个项目,只需将值添加到字符串中,否则添加空格和值。

答案 3 :(得分:0)

如果您的规则将字符串与其间的空格连接起来,那么

技术上this is a test .是正确的。如果你想要像句点和逗号这样的语法符号没有空格,你就必须做一些正则表达式。此外,您不需要循环或StringBuilders:

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

类似的东西,第一个replaceAll()参数是一个正则表达式,包含你在括号内关注的所有符号

答案 4 :(得分: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! 

答案 5 :(得分: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);

输出:

  

out ::这是一个测试。