正则表达式提取字符串


 在网络通信时通常会用到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>"));

	}
}

 

输出结果是:

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值