1

我是 Java 编程新手。我想编写简单的 Java 网络协议。我想将此字符串发送到远程 Java 主机,例如:

230 computer delete reboot exit

我无法解决的问题是如何将字符串一一提取并放入数组中?对我来说最大的谜团是,如果我有不同长度的字符串,我该怎么做?感谢您的帮助!

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. 使用一个Pattern和一个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
    ....
    

如果从流中读取内容,第二个和第三个选择可能会更好。

或其他一些方法... :)

于 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 回答