识别字符数组中的特殊字符

时间:2011-02-11 21:00:13

标签: java arrays

我正在编写客户端/服务器应用程序。我有一个带有几个String字段的Message类。我编写了以下方法来返回这些字段的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;
}

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

2 个答案:

答案 0 :(得分:2)

我建议您按official trail: Reading from and Writing to Sockets中的建议调查PrintWriterBufferedReader类。

使用这些类,您只需使用

发送字符串即可
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();

答案 1 :(得分: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