如何提取字符串

时间:2012-06-13 14:13:50

标签: java

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

230 computer delete reboot exit

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

PS:我可以直接发送整个数组而不仅仅是简单的字符串吗?

PS 2:如果我有Java服务器和C客户端怎么办?据了解,只有字符串可用于双方之间的数据交换?

3 个答案:

答案 0 :(得分:5)

你可以:

  1. 使用String.split方法

    拆分字符串
    String text = "230 computer delete reboot exit";
    String[] split = text.split("\\s");
    
  2. 使用PatternMatcher

    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
    ....
    
  4. 如果从流中读取内容,第二个和第三个选择可能会更好。

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

答案 1 :(得分:4)

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

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

详细了解String.split()

此处使用的正则表达式\\s+等于任何空格。请阅读this以获取更多信息。

答案 2 :(得分:3)

您可以通过ObectInputStreamObjectOutputStream使用序列化直接发送数组。

但我建议您使用自己的类来封装消息。例如

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

因此它更面向对象和结构化。仅发送字符串不是一个好的设计,特别是如果协议的复杂性增加。

关于拆分字符串只需使用String.split(String regex)方法,但这不是一个好的解决方案。