我正在扫描一个String对象数组,每个字符串对象将被分解为正则表达式。
当我想通过一个增强的for循环时,是否可以将retval放入数组?
例如,如果我有String regex = new String [3];
其中regex [0] =“EVEN_BIN_NUM(0 | 1)* 0”
增强的for循环可以将我的String对象分解为EVEN_BIN_NUM和(0 | 1)* 0
我希望能够将EVEN_BIN_NUM放在一个数组中,将(0 | 1)* 0放在另一个数组中。这是我用字符串对象
扫描String数组的代码 /*
* Run through each String object and appropriately place them in the kind,
* and explicit.
*/
for (int j = 0; j < regex.length; j++)
{
for (String retval: regex[j].split(" ", 2))
{
System.out.println(retval);
}
}
对于正则表达式[0] .split(“”,2)我得到EVEN_BIN_NUM并且(0 | 1)* 0单独返回。
或者,如果你知道如何以更好的方式解决这个问题,请告诉我: EVEN_BIN_NUM(0 | 1)* 0
ODD_BIN_NUM(0 | 1)* 1
PET(猫|狗)大写字母的部分将放在“kind”数组中,其余部分放在另一个数组中。
所以kind数组有三个字符串,另一个数组有三个字符串。
希望这不会太混乱......
答案 0 :(得分:1)
使用Map对象存储信息可能是个好主意,但是,如果要将分析作为数组返回,则可以返回数组数组并执行以下操作。
String[] regex = {"EVEN_BIN_NUM (0|1)*0", "ODD_BIN_NUM (0|1)*1", "PET (cat|dog)"} ;
String[][] split = new String[regex.length][];
for(int i = 0; i < regex.length; i++) {
split[i] = regex[i].split(" ", 2);
}
然后您可以按如下方式访问数据
String firstProperty = split[0][0]; //EVEN_BIN_NUM
String firstRegex = split[0][1]; //(0|1)*0
String secondProperty = split[1][0]; //ODD_BIN_NUM
String secondRegex = split[1][1]; //(0|1)*1
等等。
或使用地图:
Map<String, Pattern> map = new HashMap<>();
for(int i = 0; i < regex.length; i++) {
String[] splitLine = regex[i].split(" ", 2);
map.put(splitLine[0], Pattern.compile(splitLine[1]));
}
这样您的属性就会直接映射到您的模式。
例如:
Pattern petPattern = map.get("PET");