代码之家  ›  专栏  ›  技术社区  ›  euphoria83

方法:具有两个不同类的实例的Java数组

  •  2
  • euphoria83  · 技术社区  · 14 年前

    我正在尝试创建一个简单的regex类型的东西供我自己使用,其中字符串中的字符可以是完全匹配的,也可以是属于一个组的一组字符中的一个(例如,组大写字母将具有所有大写字符-“a”、“B”等)。因此正则表达式- CAPS p p l e -应该匹配“Apple”或regex,例如- DIGIT DIGIT . DIGIT -应符合76.3。

    {CAPS, 'p', 'p', 'l', 'e'} . 现在,Java将允许我声明一个类型为 char[]/Character[] Group[] Object[] ?

    我真的不想处理类型的数组 对象[] .

    5 回复  |  直到 14 年前
        1
  •  0
  •   samitgaur    14 年前

    你可以雇佣 Composite 设计模式来模拟这种情况。当您需要以相同的方式处理对象类型以及该类型的对象集合时,此模式非常有用。你也可以使用 Chain of Responsibility

    基本上,您可以这样定义类(假设您需要matches()方法):

    class Pattern {
        IPatternComponent[] pattern;
        boolean matches(String str) {
            for(int i = 0; i < str.length; i++) {
                if(!pattern[i].matches(str.charAt(i)))
                    return false;
            }
            return true;
        }
    }
    
    interface IPatternComponent {
        boolean matches(char ch);
    }
    
    class Simple implements IPatternComponent {
        char ch;
        boolean matches(char ch) {
            return (this.ch == ch);
        }
    }
    
    class Group implements IPatternComponent {
        Set<IPatternComponent> components;
        boolean matches(char charToMatch) {
            for(IPatternComponent comp : components) {
                if(comp.matches(charToMatch)
                    return true;
            }
            return false;
        }
    }
    

    带着 DIGIT DIGIT . DIGIT 例子:

    • 整个模式将被表示出来 以…为例 Pattern
    • 实例将存储 内部各部分 数组-{ DIGIT , 数字 , . , 数字
    • . Simple .
    • 数字 Group ,它将存储 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 0 set
    • 由…的实例表示 简单 .
    • matches() 使用链条工作 责任-授权

    ALPHANUM 作为一个 ALPHABETS 数字 匹配() 仍然有效。

    注意:我直接在这里对代码进行了编码,所以它可能有拼写错误或小错误。为了更好的可读性,我省略了构造函数。

        2
  •  3
  •   Péter Török    14 年前

    您可以定义一个公共超类(接口),其中包含普通字符和字符类/组的子类。

        3
  •  1
  •   whaley    14 年前

    如果您想要一个混合数组或集合,则需要抽象字符/字符并将其分组到公共接口或父类型后面。假设char是一个原语,Character是最后一个类,那么编写一个接口并包装char/Character将是最好的选择。

        4
  •  0
  •   leonbloy    14 年前

    不能用两个不相关类型之一的元素定义数组。

    或者,也许更简单,只需使用一个Object[]并用一个具有放置/获取正确类型智能的类包装它。

        5
  •  0
  •   Bill K    14 年前

    char[]是非类型化的,可能不是最好的交互方式。

    组[]实际上并不是很能描述它的功能。

    也许您可以有一个方法为“match”的接口,并将实现该接口的一堆对象粘贴在其中。

    我喜欢你的“语言”通常比Regex更明确,那么像这样的东西呢:“[DIGIT][DIGIT][DIGIT][DIGIT]”或“[CAPS]pple”--加上必须的“[[]”和“[]”来匹配大括号。