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以及他们对应的值想了好久,都不知道要怎么处理,可以的话帮我写下这个程序!各位兄弟姐妹,跪求答案了,先在这里谢谢大家字符串处理

解决方案 »

  1.   

    if(str的开头=<line )
     str = <line/>if(str第一个字符为(,最后一个字符为))
    str去除第一个字符,最后一个字符。
      

  2.   

    补充说明一下 <line/>里面不止有dx,dy还有dz之类的东西,这里只需要去掉dx,dy而dz是要保留的,括号的话有多个但是只需要去掉name=后面那对。
      

  3.   

    推荐使用这种表达式,我测试了以下文件:
    结果为:
    不知道是不是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吧