列表中的通配符Java字符串

时间:2016-08-08 07:58:07

标签: java string wildcard

是否可以在Java中的列表中为字符串添加通配符?

我有一个字符串,它有不同的结尾(例如:Key(1),Key(2),Key(3),Key(4),Key(5)等等。)

是否有可能以某种方式使用通配符将字符串添加到列表中,因此我可以执行以下操作:

list.add("Key*wildcard*");

它会有所有不同的字符串结尾吗?

非常感谢: - )

编辑: 这就是我将如何使用它。

我为游戏编写了一些东西,必须检查特定的项目。此项目有费用,用于定义项目名称的结尾。该项目名为"游戏项链"。

现在,我想检查,如果用户有项目,如果没有,它会买一个。我有一个完成某项任务所需的物品清单,但是游戏项链更改名称(从8-1开始,所以它可以是"游戏项链(8),游戏项链(7),游戏项链(6) )并降至1)。我想检查用户是否拥有所需项目列表中的所有项目,但如果用户有任何版本的项链,则应返回true

3 个答案:

答案 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+")");
    }