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

青蛙小王子 2013-08-08 09:10:08
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以及他们对应的值

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

各位兄弟姐妹,跪求答案了,先在这里谢谢大家
...全文
189 4 打赏 收藏 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
matzz 2013-08-08
  • 打赏
  • 举报
回复
推荐使用这种表达式,我测试了以下文件:
引用
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吧
花木兰1闪21A 2013-08-08
  • 打赏
  • 举报
回复
分太少了
青蛙小王子 2013-08-08
  • 打赏
  • 举报
回复
补充说明一下 <line/>里面不止有dx,dy还有dz之类的东西,这里只需要去掉dx,dy而dz是要保留的,括号的话有多个但是只需要去掉name=后面那对。
2013-08-08
  • 打赏
  • 举报
回复
if(str的开头=<line ) str = <line/> if(str第一个字符为(,最后一个字符为)) str去除第一个字符,最后一个字符。

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧