当前位置:编程学习 > JAVA >>

一个比较复杂的字符串替换

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以及他们对应的值

想了好久,都不知道要怎么处理,可以的话帮我写下这个程序!

各位兄弟姐妹,跪求答案了,先在这里谢谢大家 字符串处理 --------------------编程问答-------------------- if(str的开头=<line )
 str = <line/>

if(str第一个字符为(,最后一个字符为))
str去除第一个字符,最后一个字符。
--------------------编程问答-------------------- 补充说明一下 <line/>里面不止有dx,dy还有dz之类的东西,这里只需要去掉dx,dy而dz是要保留的,括号的话有多个但是只需要去掉name=后面那对。 --------------------编程问答-------------------- 分太少了 --------------------编程问答-------------------- 推荐使用这种表达式,我测试了以下文件:
引用
name="(1,2,3,4)",age="(1,2,3,4)",<line dx="20" dy="30"/>,<line dx="40\" dy="500"/>,name="(1,2,3,4)",<line dx="20" dy="30" dz="ex"/>

结果为:
引用
name="1,2,3,4",age="(1,2,3,4)",<line/>,<line/>,name="1,2,3,4",<line dz="ex"/>

不知道是不是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吧
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,