Lar*_*ren 55 java string optimization whitespace set
我有几个Set<String>
s,并希望将每个转换为单个String
,其中原始的每个元素Set
由空格""分隔.一个天真的第一种方法就是这样做
Set<String> set_1;
Set<String> set_2;
StringBuilder builder = new StringBuilder();
for (String str : set_1) {
builder.append(str).append(" ");
}
this.string_1 = builder.toString();
builder = new StringBuilder();
for (String str : set_2) {
builder.append(str).append(" ");
}
this.string_2 = builder.toString();
Run Code Online (Sandbox Code Playgroud)
谁能想到更快,更漂亮或更有效的方法呢?
Sea*_*oyd 104
使用commons/lang,您可以使用StringUtils.join执行此操作:
String str_1 = StringUtils.join(set_1, " ");
Run Code Online (Sandbox Code Playgroud)
为简洁起见,你无法真正击败它.
更新:
重新阅读这个答案,我现在更喜欢关于番石榴木匠的另一个答案.事实上,这些天我不去附近的apache公地.
另一个更新:
Java 8引入了该方法 String.join()
String joined = String.join(",", set);
Run Code Online (Sandbox Code Playgroud)
虽然这不像Guava版本那么灵活,但是当你的类路径上没有Guava库时它很方便.
Jas*_*ies 29
如果您使用的是Java 8,则可以使用本机
String.join(CharSequence delimiter, Iterable<? extends CharSequence> elements)
Run Code Online (Sandbox Code Playgroud)
方法:
返回
String
由CharSequence
指定分隔符的副本连接在一起的元素副本的新组合.例如:Run Code Online (Sandbox Code Playgroud)Set<String> strings = new LinkedHashSet<>(); strings.add("Java"); strings.add("is"); strings.add("very"); strings.add("cool"); String message = String.join("-", strings); //message returned is: "Java-is-very-cool"
Set
实现Iterable
,所以简单地使用:
String.join(" ", set_1);
Run Code Online (Sandbox Code Playgroud)
Cow*_*wan 20
作为Seanizer公共答案的一个对照点,如果你使用Google的Guava Libraries(我在很多方面都认为是' commor-lang '的'继承者'),你会使用Joiner:
Joiner.on(" ").join(set_1);
Run Code Online (Sandbox Code Playgroud)
利用一些辅助方法的优势来做一些事情,比如:
Joiner.on(" ").skipNulls().join(set_1);
// If 2nd item was null, would produce "1, 3"
Run Code Online (Sandbox Code Playgroud)
要么
Joiner.on(" ").useForNull("<unknown>").join(set_1);
// If 2nd item was null, would produce "1, <unknown>, 3"
Run Code Online (Sandbox Code Playgroud)
它还支持直接附加到StringBuilders和Writers以及其他此类细节.
也许更短的解决方案:
public String test78 (Set<String> set) {
return set
.stream()
.collect(Collectors.joining(" "));
}
Run Code Online (Sandbox Code Playgroud)
或者
public String test77 (Set<String> set) {
return set
.stream()
.reduce("", (a,b)->(a + " " + b));
}
Run Code Online (Sandbox Code Playgroud)
但是原生的,绝对更快
public String test76 (Set<String> set) {
return String.join(" ", set);
}
Run Code Online (Sandbox Code Playgroud)
我没有可用的StringUtil库(我别无选择)所以使用标准Java我想出了这个..
如果您确信您的设置数据不包含任何逗号或方括号,则可以使用:
mySet.toString().replaceAll("\\[|\\]","").replaceAll(","," ");
Run Code Online (Sandbox Code Playgroud)
一组"a","b","c"通过.toString()转换为字符串"[a,b,c]".
然后将额外的标点替换为必要的.
污物.
归档时间: |
|
查看次数: |
69041 次 |
最近记录: |