【发布时间】:2018-03-09 19:14:25
【问题描述】:
我有以下字符串:
"data:audio/mp3;base64,ABC..."
我正在从中提取文件扩展名(在本例中为 "mp3")。
字符串因文件类型而异。一些例子:
"data:image/jpeg;base64,ABC..."
"data:image/png;base64,ABC..."
"data:audio/wav;base64,ABC..."
"data:audio/mp3;base64,ABC..."
这是我的做法:
public class Test {
private static final String BASE64_HEADER_EXP = "^data:.+;base64,";
private static final Pattern PATTERN_BASE64_HEADER = Pattern.compile(BASE64_HEADER_EXP);
private String data;
private String fileName;
public String getFileName() {
Matcher base64HeaderMatcher = PATTERN_BASE64_HEADER.matcher(data);
return String.format("%s.%s", getFilenameWithoutExtension(), getExtension(base64HeaderMatcher));
}
private String getFilenameWithoutExtension() {
return fileName.split("\\.")[0];
}
private String getExtension(Matcher base64HeaderMatcher) {
if (base64HeaderMatcher.find()) {
String base64Header = base64HeaderMatcher.group(0);
return base64Header.split("/")[1].split(";")[0];
}
return fileName.split("\\.")[1];
}
}
我想要的是一种无需像上面那样拆分和访问数组位置的方法。也许使用正则表达式提取扩展名。
我可以在RegExr 网站上使用这个表达式:
(?<=^data:.*/)(.*)(?=;)
但是,当尝试在 Java 上使用相同的正则表达式时,我收到错误 "Require that the characters immediately before the position do",因为显然 Java 不支持后向内的重复:
【问题讨论】: