不使用加'+'组合字符串

Kim*_*321 1 java string java-8

我现在正在编写单元测试,我需要创建一个特定的字符串.

我现在定义了这样的东西:

private final String at = "@:";
private String error, effect, one, two, three, four;
Run Code Online (Sandbox Code Playgroud)

在setUp(@Before)中:

    error = RandomStringUtils.randomAlphabetic (3);
    one = RandomStringUtils.randomAlphabetic (6);
    two = RandomStringUtils.randomAlphabetic (8);
    three = RandomStringUtils.randomAlphabetic (2);
    four = RandomStringUtils.randomAlphabetic (6);
    effect = (error + at + one + at + two + at + three + at + four);
Run Code Online (Sandbox Code Playgroud)

弦乐与弦乐的结合看起来非常丑陋和业余.有可能以某种方式更有效地使用其他任何东西吗?比如模式?我不知道.感谢帮助 :)

Nie*_*sen 10

为简单起见,您还可以:

String.join(at, error,one, two, three, four);
Run Code Online (Sandbox Code Playgroud)


Rob*_*bAu 7

您可以使用java内置的StringBuilder

StringBuilder sb = new StringBuilder();
sb.append(error);
sb.append(at);
sb.append(one);
...
effect = sb.toString();
Run Code Online (Sandbox Code Playgroud)


Dav*_*ave 5

如果"@:"是一致的分隔符,并且您使用的是Java 8+,那么您可能会发现这String.join是您的朋友.这看起来像是这样的:

effect = String.join("@:", error, one, two, three, four);
Run Code Online (Sandbox Code Playgroud)

从你的变量名称中稍微猜一下,但作为一个小背景,以防它有用,如果你想/需要使用Stream你也可以使用Collectors.joining,它可能看起来像:

List<String> stringParts = ...
stringParts.stream()
  .collect(Collectors.joining("@:"));
Run Code Online (Sandbox Code Playgroud)

这将使用"@:"作为分隔符连接列表中的所有内容.您还可以添加可能与error变量相关的常量前缀和/或后缀,例如:

String error = RandomStringUtils.randomAlphabetic(3);
List<String> stringParts = ...
stringParts.stream()
  .collect(Collectors.joining("@:", error, ""));
Run Code Online (Sandbox Code Playgroud)