-1

文字列を最初の文字で区切られた 2 つの部分に解析していました'&'。例: 文字列が555&hello &worldの場合、パーティションは と に555なりhello &worldます。次のコードを使用しました:

String[] numberAndMessage=currentMessage.split("(\\&)",2);
System.out.println(numberAndMessage[1]+storedMessage.message+"end");

したがって、入力すると:555&hello &world

私が期待した出力は次のとおりです。hello &worldend

しかし、代わりにそれは与えました:hello &world

2 番目のパーティションのエンディング文字に問題がある可能性があります。しかし、問題は何ですか?

コード:

UDPServer.java:

import java.net.*;
public class UDPServer extends Thread{
    public void run(){
        try{
            DatagramSocket serverSocket = new DatagramSocket(9999);
            byte[] receiveData = new byte[1024];
            byte[] sendData = new byte[1024];
            while(true)
            {
                DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
                serverSocket.receive(receivePacket);
                String currentMessage = new String( receivePacket.getData());
                System.out.println("RECEIVED: " + currentMessage);
                String[] numberAndMessage=currentMessage.split("(\\&)", 2);
                System.out.println("noAndMessage[0]="+numberAndMessage[0]+";noAndMessage[1]="+numberAndMessage[1]);
                System.out.println("numberAndMessage[1]=    "+numberAndMessage[1]+"end");
            }
        }
        catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
    }
    public static void main(String args[]) throws Exception
    {
        UDPServer server=new UDPServer();
        server.start();
    }
}

UDPClient.java:

import java.io.*;
import java.net.*;

class UDPClient
{
    public static void main(String args[]) throws Exception
    {
        BufferedReader inFromUser =
                new BufferedReader(new InputStreamReader(System.in));
        DatagramSocket clientSocket = new DatagramSocket();
        InetAddress IPAddress = InetAddress.getByName("localhost");
        byte[] sendData = new byte[1024];
        byte[] receiveData = new byte[1024];
        String sentence = inFromUser.readLine();
        sendData = sentence.getBytes();
        DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9999);
        clientSocket.send(sendPacket);
        DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
        clientSocket.receive(receivePacket);
        String modifiedSentence = new String(receivePacket.getData());
        System.out.println("FROM SERVER:" + modifiedSentence);
        clientSocket.close();
    }
}

UDPClient.java での入力:

555&hello world

UDPServer.java での出力:

RECEIVED: 555&hello world
noAndMessage[0]=555;noAndMessage[1]=hello world
numberAndMessage[1]=    hello world
4

2 に答える 2

0

についてはstoredMessage.messageわかりませんが、次のコードは出力を期待するのに適しています。

    String  currentMessage="555&hello &world";
    String[] numberAndMessage=currentMessage.split("(\\&)",2);
    System.out.println(numberAndMessage[1]+"end");

ここで出力が得られます:

hello &worldend
于 2013-06-13T10:58:24.110 に答える
-1

これを試して

public class Test {

public static void main(String[] args) { 
    String currentMessage = "555&hello &world";
    String[] numberAndMessage = currentMessage.split("(\\&)", 2);
    System.out.println(numberAndMessage[1] + "end");
  }
}

出力

hello &worldend

あなたの完全なコードのために、私はこの次の結果を得ました

import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class UDPServer extends Thread{

  public void run(){
      try{
        DatagramSocket serverSocket = new DatagramSocket(9999);
        byte[] receiveData = new byte[1024];
        byte[] sendData = new byte[1024];
        String a = "555&hello world";
        receiveData = a.getBytes();
        while(true)
        {

            DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
            //serverSocket.receive(receivePacket);
            String currentMessage = new String( receivePacket.getData());
            System.out.println("RECEIVED: " + currentMessage);
            String[] numberAndMessage=currentMessage.split("(\\&)", 2);
            System.out.println("noAndMessage[0]="+numberAndMessage[0]+";noAndMessage[1]="+numberAndMessage[1]);
            System.out.println("numberAndMessage[1]=    "+numberAndMessage[1]+"end");
        }
    }
    catch (Exception e) {
        // TODO: handle exception
        e.printStackTrace();
    }
    }
  public static void main(String args[]) throws Exception
  {
    UDPServer server=new UDPServer();
    server.start();
  }
}

出力は

RECEIVED: 555&hello world
noAndMessage[0]=555;noAndMessage[1]=hello world
numberAndMessage[1]=    hello worldend
于 2013-06-13T10:33:12.713 に答える