我是 Java 编程新手。我想编写简单的 Java 网络协议。我想将此字符串发送到远程 Java 主机,例如:
230 computer delete reboot exit
我无法解决的问题是如何将字符串一一提取并放入数组中?对我来说最大的谜团是,如果我有不同长度的字符串,我该怎么做?感谢您的帮助!
PS:我可以直接发送整个数组而不仅仅是简单的字符串吗?
PS 2:如果我有 Java 服务器和 C 客户端怎么办?据知道只有字符串可以用来交换双方之间的数据?
我是 Java 编程新手。我想编写简单的 Java 网络协议。我想将此字符串发送到远程 Java 主机,例如:
230 computer delete reboot exit
我无法解决的问题是如何将字符串一一提取并放入数组中?对我来说最大的谜团是,如果我有不同长度的字符串,我该怎么做?感谢您的帮助!
PS:我可以直接发送整个数组而不仅仅是简单的字符串吗?
PS 2:如果我有 Java 服务器和 C 客户端怎么办?据知道只有字符串可以用来交换双方之间的数据?
String input = "230 computer delete reboot exit";
String s[] = input.split("\\s+");
// now s[0] = 230 s[1] = computer
阅读更多关于String.split()的内容。
并且这里使用的正则表达式\\s+
等于任何空格。阅读此内容以获取更多信息。
您可以:
String.split
使用方法拆分字符串
String text = "230 computer delete reboot exit";
String[] split = text.split("\\s");
使用一个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);
....
使用Scanner
类
Scanner s = new Scanner(text);
int firstNumber = s.nextInt(); // 230
String secondText = s.next(); // computer
....
如果从流中读取内容,第二个和第三个选择可能会更好。
或其他一些方法... :)
ObectInputStream
您可以通过和使用序列化直接发送数组ObjectOutputStream
。
但我建议你使用自己的类来封装消息。例如
class NetworkMessage {
int code;
String param1;
String param2;
..
}
这样它就更加面向对象和结构化。只发送字符串不是一个好的设计,尤其是当协议变得复杂时。
关于拆分字符串只是使用String.split(String regex)
方法,但这不是一个好的解决方案。