是否可以在Java中的列表中为字符串添加通配符?
我有一个字符串,它有不同的结尾(例如:Key(1),Key(2),Key(3),Key(4),Key(5)等等。)
是否有可能以某种方式使用通配符将字符串添加到列表中,因此我可以执行以下操作:
list.add("Key*wildcard*");
它会有所有不同的字符串结尾吗?
非常感谢: - )
编辑: 这就是我将如何使用它。
我为游戏编写了一些东西,必须检查特定的项目。此项目有费用,用于定义项目名称的结尾。该项目名为"游戏项链"。
现在,我想检查,如果用户有项目,如果没有,它会买一个。我有一个完成某项任务所需的物品清单,但是游戏项链更改名称(从8-1开始,所以它可以是"游戏项链(8),游戏项链(7),游戏项链(6) )并降至1)。我想检查用户是否拥有所需项目列表中的所有项目,但如果用户有任何版本的项链,则应返回true
答案 0 :(得分:1)
您可以在列表中添加通配符字符串,但是您必须自己在列表中实现搜索,并且您不能依赖contains
为您工作,因为它只是调用equals
方法,equals
无法满足您的需求。
这是一个可能的解决方案:
使用List,而不是使用List,并将项目定义为正则表达式。
List<Pattern> requiredList = new List<>();
requiredList.add(Pattern.compile("Sword");
requiredList.add(Pattern.compile("Games Necklace\\(\\d+\\)");
编写一个方法,将列表中的所有模式与另一个集合进行匹配。 e.g。
public static hasAll( List<Pattern> required, Collection<String> available) {
for ( Pattern pat : available ) {
boolean matched = false;
for ( String item : needed ) {
if ( pat.matcher(item).matches() ) {
matched = true;
break;
}
}
if ( ! matched ) {
return false;
}
}
return true;
}
另一个选择是在自己的类中定义游戏项目,而不是字符串。那个班级将有一个&#34;类型&#34;和&#34;显示名称&#34;。并且您将使用类型在列表中检查它,这将是&#34;游戏项链&#34; (对于所有这些),并使用显示名称显示。
答案 1 :(得分:0)
不,因为String
具有多个值(至少在Java中)是没有意义的。你可以通过创建一个代表你的“多字符串”的类来实现它(当然会改变它的机制以满足你的确切需求。
class MultiString {
List<String> strings = new ArrayList<String>();
public MultiString(String, prefix, int numValues) {
for(int i = 0; i < numValues; i++) strings.add(prefix + String.valueOf(i));
}
public String get(int i) {
return strings.get(i);
}
}
或者你可以在列表中添加几个值。
public void addStrings(List<String> list, String prefix, int numValues) {
for(int i = 0; i < numValues; i++) list.add(prefix + String.valueOf(i));
}
在我们了解您的确切需求之前,无法提供更具体的解决方案。
答案 2 :(得分:0)
List<String> list = new ArrayList<>();
for (int i= 8; i>0;i--){
list.add("Games Necklace("+i+")");
}