Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
列表中的通配符Java字符串_Java_String_Wildcard - Fatal编程技术网

列表中的通配符Java字符串

列表中的通配符Java字符串,java,string,wildcard,Java,String,Wildcard,在Java中是否可以向列表中的字符串添加通配符 我有一个字符串,它有不同的结尾(例如:键(1)、键(2)、键(3)、键(4)、键(5)等等) 是否可以使用通配符将字符串添加到列表中,这样我就可以执行以下操作: list.add("Key*wildcard*"); 它会有所有不同的字符串结尾 非常感谢:-) 编辑: 这就是我将如何使用它 我正在为一个游戏编写代码,它必须检查特定的项目。此项目包含费用,该费用定义项目名称的结尾。该项目被称为“游戏项链” 现在,我想检查一下,如果用户有这个项目,如果

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

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

是否可以使用通配符将字符串添加到列表中,这样我就可以执行以下操作:

list.add("Key*wildcard*");
它会有所有不同的字符串结尾

非常感谢:-)

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

我正在为一个游戏编写代码,它必须检查特定的项目。此项目包含费用,该费用定义项目名称的结尾。该项目被称为“游戏项链”


现在,我想检查一下,如果用户有这个项目,如果没有,它会买一个。我有一个完成某项任务所需的物品列表,但游戏项链的名称发生了变化(从8-1,因此可以是“游戏项链(8)”、“游戏项链(7)”、“游戏项链(6)”和“游戏项链(1)”。我想检查用户是否拥有所需项目列表中的所有项目,但如果用户拥有项链的任何版本,则应返回true,因为字符串具有多个值(至少在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);
    }

}
  List<String> list = new ArrayList<>();
    for (int i= 8; i>0;i--){
        list.add("Games Necklace("+i+")");
    }
类多字符串{
列表字符串=新的ArrayList();
公共多字符串(字符串、前缀、int numvalue){
对于(inti=0;i
或者您可以只向列表中添加几个值

public void addStrings(List<String> list, String prefix, int numValues) {
    for(int i = 0; i < numValues; i++) list.add(prefix + String.valueOf(i));
}
public void addStrings(列表、字符串前缀、int numvalue){
对于(inti=0;i
在我们了解您的确切需求之前,无法提供更具体的解决方案。

List List=new ArrayList();
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);
    }

}
  List<String> list = new ArrayList<>();
    for (int i= 8; i>0;i--){
        list.add("Games Necklace("+i+")");
    }
对于(int i=8;i>0;i--){ 列表。添加(“游戏项链(“+i+”)); }
您可以向列表中添加通配符字符串,但是您必须自己在列表中执行搜索,并且您不能依靠
包含
来为您工作,因为它只调用
等于
方法,而
等于
不能满足您的需要

以下是一个可能的解决方案:

  • 不要使用列表,而是使用列表,并将该项定义为正则表达式

    List<Pattern> requiredList = new List<>();
    requiredList.add(Pattern.compile("Sword");
    requiredList.add(Pattern.compile("Games Necklace\\(\\d+\\)");
    
    List requiredList=新列表();
    requiredList.add(Pattern.compile(“剑”);
    requiredList.add(Pattern.compile(“游戏项链\(\\d+\\)”);
    
  • 编写一个方法,将列表中的所有模式与另一个集合相匹配

    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;
    }
    
    publicstatichasall(需要列表,集合可用){
    用于(模式pat:可用){
    布尔匹配=假;
    for(字符串项:需要){
    if(pat.matcher(item.matches()){
    匹配=真;
    打破
    }
    }
    如果(!匹配){
    返回false;
    }
    }
    返回true;
    }
    

另一个选项是在自己的类中定义游戏项目,而不是作为字符串。该类将有一个“类型”和一个“显示名称”。您将使用类型在列表中检查它,该类型将是“游戏项链”(适用于所有项目),并使用显示名称进行显示。

您需要对该列表做什么?如何使用列表中的字符串?我不明白您想在这里做什么。添加
并获取
键(1),键(2)…
在列表中?也许你应该多解释一点。
字符串的所有不同结尾
你如何定义
所有不同的结尾
?。请注意,即使是
列表
也有其可容纳的值的限制。编辑了原始帖子:-)@Jannik判断你的编辑时,我宁愿选择带有类成员变量
费用
的类
项链
。这一方法使用
OOP
原则,你不必关心
字符串
的不同含义。