思路:读取CSS文件,将文件内容转为字符串,通过正则表达获取想要的结果
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class CSSUtils {
// 匹配花括号里的内容
private static Pattern classPattern = Pattern.compile("\\{[^}]+}");
private String fileStr;
public CSSUtils(String path) {
try {
this.fileStr = readFileToString(path);
} catch (IOException e) {
e.printStackTrace();
}
}
public static String readFileToString(String path) throws IOException {
FileReader reader = new FileReader(new File(path));
StringBuilder stringBuilder = new StringBuilder();
char[] buffer = new char[10];
int size;
while ((size = reader.read(buffer)) != -1) {
stringBuilder.append(buffer, 0, size);
}
return stringBuilder.toString();
}
/**
* 获取指定 class 的属性
* @param className class 名称
* @return
*/
public String getClass(String className){
if (this.fileStr == null || "".equals(this.fileStr)){
return "";
}
// 匹配 class 内容 或者 Pattern.compile(className +"(\S*?)[^}]*}.*?|{.*? /}")
Pattern pattern = Pattern.compile("." + className +"( )*\\{[^}]+}");
Matcher matcher = pattern.matcher(this.fileStr);
StringBuilder stringBuilder = new StringBuilder("");
while (matcher.find()){
stringBuilder.append(matcher.group());
}
matcher = classPattern.matcher(stringBuilder.toString());
stringBuilder = new StringBuilder("");
while (matcher.find()){
stringBuilder.append(matcher.group());
}
return stringBuilder.toString();
}
/**
* 获取指定属性的值
* @param className class 名称
* @param attrName 属性 名称
* @return
*/
public String getCssAttribute(String className, String attrName){
String res = this.getClass(className);
if ("".equals(res)){
return "";
}
// 匹配指定属性名
Pattern attrPattern = Pattern.compile("[^a-zA-Z\\-]" + attrName + ":\\s*([^;\\}]{1,100})\\s*[;\\}]{1}");
Matcher matcher = attrPattern.matcher(res);
res = "";
while(matcher.find()){
res = matcher.group(1);
}
return res;
}
}
其中读取文件转字符串可以使用:
String fileStr = org.apache.commons.io.FileUtils.readFileToString(new File(path), StandardCharsets.UTF_8)
还可以使用 cssparser