name="(1,2,3,4)",age="(1,2,3,4)",<line dx="20" dy="30"/>,<line dx="40\" dy="500"/>
------line这种节点有一大把但是dx和dy的值不同
现在要求把这个字符串变为
name="1,2,3,4",age="(1,2,3,4)",<line/>,<line/>
也就是说去掉name后面的这对括号,剔除dx,dy以及他们对应的值想了好久,都不知道要怎么处理,可以的话帮我写下这个程序!各位兄弟姐妹,跪求答案了,先在这里谢谢大家字符串处理
------line这种节点有一大把但是dx和dy的值不同
现在要求把这个字符串变为
name="1,2,3,4",age="(1,2,3,4)",<line/>,<line/>
也就是说去掉name后面的这对括号,剔除dx,dy以及他们对应的值想了好久,都不知道要怎么处理,可以的话帮我写下这个程序!各位兄弟姐妹,跪求答案了,先在这里谢谢大家字符串处理
str = <line/>if(str第一个字符为(,最后一个字符为))
str去除第一个字符,最后一个字符。
结果为:
不知道是不是lz想要的结果
处理代码如下:
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class MessageProcess { private static Pattern vkP = Pattern.compile("(name)=\\\"\\(([\\d+|,]+)\\)\"");
private static Pattern kP = Pattern.compile("\\<line\\s+([\\w|=|\"|\\\\|\\s]+)/\\>"); public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("test.txt")));
String content;
while((content = br.readLine()) != null){
Matcher matcher = vkP.matcher(content);
while(matcher.find()){
content = content.replace(matcher.group(0), String.format("%s=\"%s\"", matcher.group(1), matcher.group(2)));
}
matcher = kP.matcher(content);
while(matcher.find()){
String[] tempS = matcher.group(1).split("\\s+");
StringBuffer sb = new StringBuffer("<line");
for(String s: tempS){
String ds = s.trim();
if(ds.startsWith("dx=") || ds.startsWith("dy=")){
} else {
sb.append(" ").append(ds);
}
}
sb.append("/>");
content = content.replace(matcher.group(0), sb.toString());
}
System.out.println(content);
}
br.close();
}
}
如果有不明白的,私Mail吧