如何将 Set<String> 转换为 Java 中的字符串?

How do I turn a Set<String> into a string in Java?

我有一组<>字符串:

Set<String> mySet = new HashSet<String>();
    
hs.add("how");
hs.add("are");
hs.add("you");

我想把这个集合变成一个字符串,但是有两个规则:

  1. “:*”应作为后缀添加到每个单词
  2. 单词应该用竖线分隔 |

像这样:

"how:*|are:*|you:*"

最简单的方法是什么?

这是我目前尝试过的方法:

StringBuilder sb = new StringBuilder();

for (String word : search) {
    sb.append(word);
    sb.append(":*|");
}

这个问题是它在最后给出了一个额外的管道:

"how:*|are:*|you:*|"

我当然可以删除最后一个字符,但如果可能的话,我正在寻找更简单的方法。

如果您使用的是 Java 8 或更高版本,那么 String#join 是一种选择。但是,您应该使用有序集合来确保字符串按您想要的顺序出现:

List<String> myList = Arrays.asList(new String[] { "how", "are", "you" });
String output = String.join(":*|", myList) + ":*";
System.out.println(output);  // how:*|are:*|you:*

您透露您正在尝试构建一个正则表达式替换来在您的数据库中搜索一个术语。如果是这样,那么您应该使用这种模式:

.*\b(?:how:|are:|you:).*

前导和尾随 .* 可能是可选的,在 API 接受仅匹配列的一部分的模式的情况下。这是生成此模式的更新 Java 代码:

List<String> myList = Arrays.asList(new String[] { "how", "are", "you" });
StringBuilder sb = new StringBuilder();
sb.append(".*\b(?:").append(String.join(":|", myList)).append(":).*");
System.out.println(sb.toString);  // .*\b(?:how:|are:|you:).*

只要看看末尾管道的问题,您就可以将其视为在除第一个单词之外的每个单词之前 添加的东西。通常识别第一个元素比识别最后一个元素更容易。

这是一小段伪代码来展示这个想法:

separator = "|"
firstWord <– true
for each word in source {
  if (firstWord) {
    firstWord <– false
  } else {
    outString.append(separator)
  }
  outString.append(word + ";*)
}