2011-02-11 58 views
0

我正在编写客户端/服务器应用程序。我有一个消息类与几个字符串字段。我写了下面的方法返回一个char [这些字段]:识别字符数组中的特殊字符

public char[] toArrayOfChar() 
{ 
    String str = ""; 
    char[] charr; 
    str += from; 
    str += "\r\n"; 
    str += to; 
    str += "\r\n"; 
    str += header; 
    str += "\r\n"; 
    str += body; 
    str += "\r\n"; 
    str += header; 
    str += "\r\n"; 
    charr = str.toCharArray(); 

    return charr; 
} 

现在我想每个字段分开,并将其转换为字符串我从客户端发送它的服务器后。如何识别每个字段末尾的回车符和换行符?

+0

StringTokenizer可以提供帮助。但也许有更好的办法。 – Mikel 2011-02-11 21:04:42

+0

++ StringTokenizer,或者如果您觉得masta regEx也有效。尽管我只是使用\ n并将其拆分为最简单的形式 – bestsss 2011-02-11 21:39:43

回答

2

为您的实际问题看,很好的答案已经给出,但对你的代码风格:

使用多个String + =调用的效率非常低。这是一个更高效的版本。

首先定义一个常数CR + LF:

private static final String CRLF = "\r\n"; 

现在使用StringBuilder打造String,就像这样:

public char[] toArrayOfChar() 
{ 
    return new StringBuilder() 
     .append(from).append(CRLF) 
     .append(to).append(CRLF) 
     .append(header).append(CRLF) 
     .append(body).append(CRLF) 
     .append(header).append(CRLF) 
     .toString() 
     .toCharArray(); 
} 

这是既容易阅读,更高效(你的版本必须为每个+ =调用创建一个新的String实例)。

另外,也许你应该只是写这个代码(减去.toCharArray()行)在你的对象的toString()方法和做this.toString().toCharArray()得到char[]。使用标准机制总是一个很好的做法,这就是toString()方法的用法,create a String representation of the object

2

我建议你看看PrintWriterBufferedReader类,如official trail: Reading from and Writing to Sockets中所建议的那样。使用

这些类,你可以使用

out.println(from); 
out.println(to); 
out.println(header); 
out.println(body); 

请发送您的字符串,并使用

String from = bufferedReader.readLine(); 
String to  = bufferedReader.readLine(); 
String header = bufferedReader.readLine(); 
String body = bufferedReader.readLine();