在Java中切分包含“$$”符号的字符串

在实际开发中,我们经常会遇到需要切分包含特定符号的字符串的情况。本文将介绍如何在Java中包含“$$”符号,并将其作为切分符号对字符串进行处理。

判断字符串中是否包含"$$"符号

首先,我们可以使用Java的contains()方法来判断一个字符串中是否包含特定的子字符串,比如""符号。以下是判断包含"$$"符号。

//以下是判断包含"$$"符号的示例代码:
public class Main {
    public static void main(String[] args) {
        String inputString = "A$$B$$C$$D";

        boolean containsSeparator = inputString.contains("$$");

        if (containsSeparator) {
            System.out.println("字符串包含\"$$\"符号");
        } else {
            System.out.println("字符串不包含\"$$\"符号");
        }
    }
}

 以上代码将输出以下结果:

字符串包含"$$"符号

使用"$$"作为切分符号切分字符串

接下来,我们可以使用Java的split()方法来根据"$$"作为切分符号来切分字符串。以下是切分包含"$$"并以其作为切分符号来切分字符串。

//以下是切分包含"$$"符号的字符串的示例代码
public class Main {
    public static void main(String[] args) {
        String inputString = "A$$B$$C$$D";

        String[] parts = inputString.split("\\$\\$");

        for (String part : parts) {
            System.out.println(part);
        }
    }
}

在这段代码中,我们将上面代码中的字符串用指定的符号切分,切分结果如下:

A
B
C
D

通过以上代码示例,我们展示了以下两个场景。

  • 如何判断包含"$$"符号的字符串;
  • 如何使用"$$"符号作为切分符号切分字符串。

这两种操作在实际开发中经常会用到,希望能帮助您更好地处理类似的问题。有问题欢迎指正,谢谢!

 

 

 

 

 

Java中,UDP接收分包数据转成字符串出现乱码通常是由于字符编码不一致或数据长度计算错误导致。下面是一些解决办法: ### 统一字符编码 在发送和接收数据时,要确保使用相同的字符编码。例如,都使用UTF - 8编码。在发送端,使用`str.getBytes("UTF-8")`来获取字节数组;在接收端,使用`new String(arr, 0, len, "UTF-8")`来将字节数组转换为字符串。示例代码如下: ```java // 发送端示例 import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class UDPSender { public static void main(String[] args) throws Exception { String sendStr = "你好,世界"; DatagramSocket socket = new DatagramSocket(); InetAddress address = InetAddress.getByName("127.0.0.1"); byte[] sendData = sendStr.getBytes("UTF-8"); DatagramPacket packet = new DatagramPacket(sendData, sendData.length, address, 7217); socket.send(packet); socket.close(); } } // 接收端示例 import java.net.DatagramPacket; import java.net.DatagramSocket; public class UDPReceiver { public static void main(String[] args) throws Exception { DatagramSocket datagramSocket = new DatagramSocket(7217); while (true) { DatagramPacket datagramPacket = new DatagramPacket(new byte[1024], 1024); datagramSocket.receive(datagramPacket); byte[] arr = datagramPacket.getData(); int len = datagramPacket.getLength(); System.out.println(new String(arr, 0, len, "UTF-8")); } } } ``` ### 正确计算数据长度 在发送数据时,要确保计算的是字节数组的实际长度,而不是字符串的字符长度。因为中文字符在不同编码下可能占用多个字节,使用`sendStr.length()`计算长度会导致数据长度计算错误,进而出现乱码。如在发送端使用`sendStr.getBytes("UTF-8").length`来获取正确的字节长度 [^1]。 ### 处理分包数据 UDP是无连接的,可能会出现分包、粘包的情况。可以在应用层实现简单的协议来处理分包数据,例如在数据头部添加数据长度信息,接收端根据这个信息来正确拼接和解析数据。 ### 示例代码 ```java // 发送端示例,添加数据长度信息 import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class UDPSenderWithLength { public static void main(String[] args) throws Exception { String sendStr = "你好,世界"; byte[] data = sendStr.getBytes("UTF-8"); byte[] lengthBytes = new byte[4]; lengthBytes[0] = (byte) ((data.length >> 24) & 0xFF); lengthBytes[1] = (byte) ((data.length >> 16) & 0xFF); lengthBytes[2] = (byte) ((data.length >> 8) & 0xFF); lengthBytes[3] = (byte) (data.length & 0xFF); byte[] sendData = new byte[lengthBytes.length + data.length]; System.arraycopy(lengthBytes, 0, sendData, 0, lengthBytes.length); System.arraycopy(data, 0, sendData, lengthBytes.length, data.length); DatagramSocket socket = new DatagramSocket(); InetAddress address = InetAddress.getByName("127.0.0.1"); DatagramPacket packet = new DatagramPacket(sendData, sendData.length, address, 7217); socket.send(packet); socket.close(); } } // 接收端示例,解析数据长度信息 import java.net.DatagramPacket; import java.net.DatagramSocket; public class UDPReceiverWithLength { public static void main(String[] args) throws Exception { DatagramSocket datagramSocket = new DatagramSocket(7217); while (true) { DatagramPacket datagramPacket = new DatagramPacket(new byte[1024], 1024); datagramSocket.receive(datagramPacket); byte[] arr = datagramPacket.getData(); int length = ((arr[0] & 0xFF) << 24) | ((arr[1] & 0xFF) << 16) | ((arr[2] & 0xFF) << 8) | (arr[3] & 0xFF); byte[] realData = new byte[length]; System.arraycopy(arr, 4, realData, 0, length); System.out.println(new String(realData, "UTF-8")); } } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值