我正在尝试创建一种简单的正则表达式供我自己使用,其中字符串中的字符可以是完全匹配,也可以是属于一个组的一组字符中的一个(例如,Group CAPS将具有所有大写字符- 'A','B'等)。因此,例如-CAPS p p l e
-的正则表达式应匹配“ Apple”,或例如-DIGIT DIGIT . DIGIT
-的正则表达式应匹配76.3。
我试图将此正则表达式模式存储在数组{CAPS, 'p', 'p', 'l', 'e'}
中。
现在,Java将允许我声明一个char[]/Character[]
或Group[]
类型的数组,其中Group是我构造的代表此类字符组的类。如果我需要一个混合数组来存储上述模式,除了声明类型为Object[]
的数组之外,我还有其他选择吗?
我真的不想处理类型为Object[]
的数组。
最佳答案
您可以使用Composite设计模式对此情况进行建模。在需要以相同方式处理对象类型以及该类型对象的集合时,此模式很有用。您也可以同时使用Chain of Responsibility模式。
基本上,您将定义这样的类(假设您需要match()方法):
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
,DIGIT
,.
,DIGIT
}。.
将是Simple
的实例。DIGIT
将是的实例Group
,它将存储1
,2
,3
,4
,5
,6
,7
,8
,9
,0
在其内部
set
集合中的每个元素都是
由以下实例表示
Simple
。matches()
将使用链条工作责任-委托
责任链。
使用此设计,您还可以轻松地将
ALPHANUM
定义为Group
,其内部集由ALPHABETS
和DIGIT
组成,并且matches()
仍然可以使用。注意:我直接在此处编码代码,因此可能会有错别字或小错误。为了更好的可读性,我省略了构造函数。
关于java - 方法:具有两个不同类的实例的Java数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3428330/