`
郭广川
  • 浏览: 67290 次
  • 性别: Icon_minigender_1
  • 来自: 河北
社区版块
存档分类
最新评论

正则表达式提取字符串

阅读更多


 在网络通信时通常会用到xml,当传输数据流时都是进行字节传输,为区分所传输的数据的类型,通常会在传输字节两边加上属性标志,类似于html编程。

 

 例如:假如客户端登录了,它就要向服务器发送一段字节流,说明用户名。假如这个人的用户名是:梅竹寒香,那么客户端就要对“梅竹寒香”进行xml包装,把它包装成:<user>梅竹寒香</user>。这样当服务器接收到这条消息,根据通信协议就会将这短消息解析成用户名的含义,这时服务器就要进行字符串的提取,因为只有“梅竹寒香”是所需的用户名,而<user></user>只是标志符号,只代表用户含义。这时就要用到字符的提取工作。

 

怎样实现符合标准字符串的快速提取呢?这是可以用正则表达式的方法,进行匹配提取。

 

示例如下(模拟演示:通常标志符都是加载所要提取的字节流的最外层):

 

package serverSocket;

import java.util.regex.Pattern;

public class DoWithString {

	public static String getStringWithoutFlag(String IPS) {
		String s = null;
		String IPString = "(.+)(<user>.+</user>)*";//符合条件的正则表达式

		if (IPS.matches(IPString)) {
			int start = IPS.indexOf("<user>");//取得第一个<user>的位置
			int last = IPS.lastIndexOf("</user>");//取得最后一个</user>的位置
			s = IPS.substring(start + 6, last);//进行字符串的截取,得到用户名
		}
		return s;
	}

	public static void main(String args[]) {
		//客户端有时向服务器传输的用户名中可能还夹杂着额外内容,这时要对其过滤
		System.out.println(getStringWithoutFlag("额外内容<user>梅竹寒香</user>额外内容"));
		//<mag></msg>代表是一则消息标志符,其中含有用户名,现在进行提取打印
		System.out.println(getStringWithoutFlag("<msg>dfdsf<user>梅竹寒香</user></msg>"));
		// 很有可能某个用户的用户名中含有标志符
		System.out.println(getStringWithoutFlag("<user><user>梅竹寒香</user></user>"));

	}
}

 

输出结果是:

 

 

 

 

 

  • 大小: 397.1 KB
  • 大小: 14.7 KB
2
0
分享到:
评论
1 楼 chen6485 2011-03-29  
你指的应该只是基于XMPP协议的通信传输吧?传输协议有很多种的啊

相关推荐

Global site tag (gtag.js) - Google Analytics