以下是字符串,
卡41:
插槽类型:SFC
卡42:
插槽类型:PFC
卡43:
插槽类型:GFC
运行状态:空
卡44:
插槽类型:肯德基
卡45:
插槽类型:SFC
我想以某种方式拆分,以便我应该具有(41,SFC),(42,SFC),(43,GFC),(44,KFC)...的地图。
目前我正在使用此正则表达式“ \ s * Card \ s * \ d + \ s *:”,是否可以使用相同的正则表达式进行拆分和捕获,就像我的意思是我想使用“ \ s * Card \ s *( \ d +)\ s *:“,并捕获(\ d +)。
最佳答案
这是您想要实现的示例。
String input = "Card 41: Slot Type : SFC Card 42: Slot Type : " +
"PFC Card 43: Slot Type : GFC Operational State : Empty " +
"Card 44: Slot Type : KFC Card 45: Slot Type : SFC";
// | starts with "Card"
// | | any white space
// | | | group 1: any digits
// | | | | any characters, reluctantly
// | | | | | group 2: looking for 3 capital letter characters
Pattern p = Pattern.compile("Card\\s+(\\d+).+?([A-Z]{3})");
Matcher m = p.matcher(input);
// key set of map will be ordered lexicographically
// if you want to retain insertion order instead, use LinkedHashMap
// for better performance, just a HashMap
Map<String, String> map = new TreeMap<String, String>();
// iterate over find
while (m.find()) {
map.put(m.group(1), m.group(2));
}
System.out.println(map);
输出量
{41=SFC, 42=PFC, 43=GFC, 44=KFC, 45=SFC}