在我徘徊并自己动手之前,我想知道是否有人知道如何做以下事情......
目前我正在使用MessageFormat创建一些字符串。我现在要求其中一些字符串具有可变数量的参数。
例如(当前代码):
MessageFormat.format("{0} OR {1}", array[0], array[1]);
现在我需要这样的东西:
// s will have "1 OR 2 OR 3"
String s = format(new int[] { 1, 2, 3 });
和
// s will have "1 OR 2 OR 3 OR 4"
String s = format(new int[] { 1, 2, 3, 4 });
有几种方法我可以考虑创建格式字符串,例如每个参数的数量为1个字符串(它们的数量有限,所以这很实用,但看起来很糟糕),或者动态构建字符串(它们很多,所以这可能很慢)。
还有其他建议吗?
答案 0 :(得分:5)
除非,我遗漏了一些陈旧的join
。在Java 7获得String.join(没有玩笑)之前,有一些实现,比如Apache commons lang StringUtils.join。
StringUtils.join(new Integer[] { 1, 2, 3, 4 }, "OR");
唯一的问题是它不能直接用于原始的int []数组。
答案 1 :(得分:1)
使用Dollar应该很简单:
String s1 = $(1, 3).join(" OR ");
String s2 = $(1, 4).join(" OR ");
其中$(1, n)
是范围对象包装器(有Collection
s,数组,CharSequence
等的包装器。
答案 2 :(得分:1)
您可以使用 Java 8 及以后的 String#join 方法,这将允许您使用给定的分隔符连接字符串。
String.join(" OR ", "a", "b", "c")
答案 3 :(得分:0)
我认为最简单的解决方案是编写一个快速函数,该函数遍历for
循环中的参数,将“ OR ” + arg[i]
附加到StringBuilder(第一个参数的特殊情况),然后返回StringBuilder的toString()
值。怎么回事?
String format(String... args) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < args.length; i++) {
if (i > 0) {
sb.append(" OR ");
}
sb.append(args[i]);
}
return sb.toString();
}