大家好,又见面了,我是你们的朋友全栈君。
起因
没有找到android有相关的工具类,又不要为了格式化个xml导入一个jar包。
于是自己写了个xml格式化的代码。
代码如下:
/**
* 格式化xml
*
* @return
*/
public String format(String str) {
StringBuffer buffer = new StringBuffer(str);
int numSpace = 0;//空格的个数
/**
* 定位开始结束标签
*/
int start = buffer.indexOf("<", 0);
int end = buffer.indexOf(">", start);
//定位下下个标签
int nextStart = buffer.indexOf("<", end);//-1之后
boolean isNext = true;
while (start != -1 && end != -1) {
/**
* 是否换行,已经换多少格
*/
//如果当前为开始标签,下一个也为开始标签
if ((buffer.indexOf("/", start) != start + 1 && buffer.indexOf("/", nextStart) != nextStart + 1)) {
numSpace++;
isNext = true;
}
//如果当前为开始标签,且下一个标签为结束标签
else if ((buffer.indexOf("/", start) != start + 1 && buffer.indexOf("/", nextStart) == nextStart + 1)) {
isNext = false;
}
//如果当前为结束标签,且下一个标签为开始标签
else if ((buffer.indexOf("/", start) == start + 1 && buffer.indexOf("/", nextStart) != nextStart + 1)) {
isNext = true;
}
//如果当前为结束标签,且下一个标签还是结束标签
else if ((buffer.indexOf("/", start) == start + 1 && buffer.indexOf("/", nextStart) == nextStart + 1)) {
numSpace--;
isNext = true;
}
//这个位置判断是否是加空格
if (isNext) buffer.insert(end + 1, "\n" + $t(numSpace));
//标签向下移动
start = buffer.indexOf("<", end);
end = buffer.indexOf(">", start);
nextStart = buffer.indexOf("<", end);
}
// 注释:返回我们格式化后的结果
return buffer.toString();
}
//返回N个\t
private String $t(int num) {
String t = "";
for (int i = 1; i < num; i++) {
t += "\t";
}
return t;
}
记录于此。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/160143.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...