1

私はJavaプログラミングが初めてです。簡単な Java ネットワーク プロトコルを書きたいと思います。この文字列をリモート Java ホストに送信します。たとえば、次のようになります。

230 computer delete reboot exit

解決できない問題は、文字列を 1 つずつ抽出して配列に入れる方法です。そして、私にとって最大の謎は、長さが異なる文字列がある場合、どうやってこれを行うのですか? ご協力ありがとうございました!

PS: 単純な文字列だけでなく、配列全体を直接送信できますか?

PS 2: Java サーバーと C クライアントがある場合はどうなりますか? 知る限り、両側間でデータを交換するために使用できるのは文字列だけですか?

4

3 に答える 3

4
String input = "230 computer delete reboot exit";
String s[] = input.split("\\s+");

// now s[0] = 230 s[1] = computer

詳細はString.split()を参照してください。

ここで使用される正規表現\\s+は、任意の空白と同じです。詳細については、こちらをお読みください。

于 2012-06-13T14:15:51.590 に答える
4

次のいずれかを実行できます。

  1. String.splitメソッドを使用して文字列を分割する

    String text = "230 computer delete reboot exit";
    String[] split = text.split("\\s");
    
  2. aPatternと a の使用Matcher

    String text = "230 computer delete reboot exit";
    Pattern p = Pattern.compile("(.*)\\s+(.*)\\s+(.*)\\s+(.*)\\s+(.*)");
    Matcher m = p.matcher(text);
    if (m.matches()) {
        String first = m.group(1);
        String second = m.group(2);
        ....
    
  3. Scannerクラスの使用

    Scanner s = new Scanner(text);
    int firstNumber = s.nextInt(); // 230
    String secondText = s.next(); // computer
    ....
    

ストリームからデータを読み取る場合は、2 番目と 3 番目の選択肢が優れている可能性があります。

または他の方法... :)

于 2012-06-13T14:16:20.450 に答える
3

ObectInputStreamおよびを介したシリアル化を使用して、配列を直接送信できますObjectOutputStream

ただし、独自のクラスを使用してメッセージをカプセル化することをお勧めします。例えば

class NetworkMessage {
  int code;
  String param1;
  String param2;
  ..
}

そのため、よりオブジェクト指向で構造化されています。特にプロトコルが複雑になる場合は、文字列だけを送信するのは適切な設計ではありません。

文字列の分割に関しては、String.split(String regex)メソッドを使用するだけですが、良い解決策ではありません。

于 2012-06-13T14:18:00.950 に答える