服务端
package regex;
import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class UDPServer {
public static void main(String[] args) throws Exception{
//打开UDP对象 并监听某个端口 用于接收数据
DatagramSocket ds = new DatagramSocket(10000);
//创建字节数组 用于保存接收到的数据
byte[] buf = new byte[1024];
//声明一个包接收器
DatagramPacket dp = new DatagramPacket(buf,buf.length);
while(true){
//通过开启的端口接收数据
ds.receive(dp);
ByteArrayInputStream bais = new ByteArrayInputStream(buf);
DataInputStream dis = new DataInputStream(bais);
System.out.println(dis.readUTF());
}
}
}
客户端
package regex;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.util.Scanner;
public class UDPClient {
public static void main(String[] args) throws Exception{
while(true){
Scanner scanner = new Scanner(System.in);
//要发送的数据
String string = scanner.nextLine();
//创建字节数组输出流
ByteArrayOutputStream baos = new ByteArrayOutputStream();
//创建数据流
DataOutputStream dos = new DataOutputStream(baos);
//写出数据 把数据写到字节流组流中 同时保存了数据类型
dos.writeUTF(string);
//把数据转换为字节数组
byte[] buf = baos.toByteArray();
System.out.println(new String(buf));
// 数据传输
// 创建数据包,把数据进行打包
// 并绑定服务端地址和端口
DatagramPacket dp = new DatagramPacket(buf, buf.length,new InetSocketAddress("127.0.0.1", 10000));
// 传输,需要本地开启端口把数据发送出去
DatagramSocket ds = new DatagramSocket(9999);
// 发送数据包
ds.send(dp);
// 关闭资源
ds.close();
System.out.println("发送完成");
}
}
}
2正则表达式
编码实现
package socket;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args) {
// 还原成 : 我要学编程
String input = "我我...我我...我要..要要...要要...学学学....学学...编编编..编程..程.程程...程...程";
// 1 吧.去掉
input = input.replaceAll("[^\u4E00-\u9FFF]", "");
// System.out.println(input);
// (.) : 任意字符组成
// \\1 获取前面组中的数据
// (\\d)\\1 : 表示两个连续出现的数字, 比如 11,22,33,44
// (\\d)(a)\\1 : 表示 第一个和第三个是相同的数字,且数字中间有个a ,1a1,9a9
// (\\d)(a)\\2 : 表示 第一个是数字,第二个和第三个都是a,1aa,3aa
String regex = "(.)(\\1+)";
// 创建正则表达式引擎对象
Pattern pattern = Pattern.compile(regex);
// 创建匹配器
Matcher matcher = pattern.matcher(input);
// find查找
// while (matcher.find()) {
// // 使用 group(1)把group(0) 替换即可
// input = input.replaceAll(matcher.group(), matcher.group(1));
// }
// $1 就是 group(1) 而 regex 就等于是group();
input = input.replaceAll(regex, "$1");
System.out.println(input);
}
}