匹配符号
^ $ . \d \D \S \s x|y
限制符
限定符定义了一个元素可以发生的频率。
- {X} {X,Y} +
- ?
如果 ? 是限定符 * 或 + 或 ? 或 {} 后面的第一个字符,那么表示非贪婪模式(尽可能少的匹配字符),而不是默认的贪婪模式
常用组合
([\s\S]*) 任意字符
示例代码
下面这段代码演示切割一段字符并组装成 map
HashMap map = new HashMap();
Pattern videoPattern = Pattern.compile("Video (Sending|Receiving) Stats:\r\n([\\s\\S]*)");
Matcher videoMatcher = videoPattern.matcher(partPString);
if (videoMatcher.find()) {
videoMatcher.group(1).trim();
HashMap videoMap = (HashMap) split2Map(videoMatcher.group(2).trim());
if (TextUtils.equals(videoMatcher.group(1).trim(), "Sending")) {
map.put("videoCaptureFr", videoMap.get("Capture Fr"));
map.put("videoFPS/IDR", videoMap.get("FPS/IDR"));
map.put("videoBitrate/Setrate", videoMap.get("Bitrate/Setrate"));
map.put("videoQP", videoMap.get("QP"));
map.put("videoFecPrecent", videoMap.get("FecPrecent"));
} else {
map.put("videoFPS/IDR", videoMap.get("FPS/FIR"));
map.put("videoRenderFR", videoMap.get("Render FR"));
map.put("videoPvMos", videoMap.get("PvMos"));
}
map.put("videoPackets", videoMap.get("Packets"));
map.put("videoResolution", videoMap.get("Resolution"));
map.put("videoBitrate/Setrate", videoMap.get("Bitrate/Setrate"));
} else {
Log.d(TAG, "Video no match");
}
}
按照/r/n 将字符拆分成map
private Map split2Map(String statistic) {
HashMap<String, String> map = new HashMap();
String[] separated = statistic.split("\r\n");
for (int i = 0; i < separated.length; i++) {
String[] s = separated[i].split(":");
try {
if (s.length <= 1) {
map.put(s[0], "");
} else {
map.put(s[0].trim(), s[1].trim());
}
} catch (ArrayIndexOutOfBoundsException exception) {
}
}
return map;
}