通过换行符拆分字符串

时间:2012-07-19 05:50:29

标签: java regex sockets netbeans split

我正在读取一个文件,该文件通过套接字发送,然后尝试通过换行符(\ n)将其拆分,当我在文件中读取时我正在使用byte []并将字节数组转换为a字符串,以便我可以拆分它。

public String getUserFileData()
{
    try
    {
        byte[] mybytearray = new byte[1024];
        InputStream is = clientSocket.getInputStream();
        int bytesRead = is.read(mybytearray, 0, mybytearray.length);

        is.close();

        return new String(mybytearray);
    }
    catch(IOException e)
    {

    }

    return "";
}

以下是用于尝试拆分String

的代码
public void readUserFile(String userData, Log logger)
{
    String[] data;
    String companyName;

    data = userData.split("\n");

    username = data[0];
    password = data[1].toCharArray();
    companyName = data[2];
    quota = Float.parseFloat(data[3]);

    company = new Company();            
    company.readCompanyFile("C:\\Users\\Chris\\Documents\\NetBeansProjects\\ArFile\\ArFile Clients\\" + companyName + "\\"
            + companyName + ".cmp");

    cloudFiles = new CloudFiles();
    cloudFiles.readCloudFiles(this, logger);
}

导致此错误

Exception in thread "AWT-EventQueue-1" java.lang.ArrayIndexOutOfBoundsException

2 个答案:

答案 0 :(得分:3)

正如评论中所述,使用BufferedReader是最好的 - 无论如何你应该使用InputStreamReader才能从二进制转换为文本。

// Or use a different encoding - whatever's appropriate
BufferedReader reader = new BufferedReader(
    new InputStreamReader(clientSocket.getInputStream(), "UTF-8");
try {
    String line;
    // I'm assuming you want to read every incoming line
    while ((line = reader.readLine()) != null) {
        processLine(line);
    }
} finally {
    reader.close();
}

请注意,说明要使用哪种编码非常重要 - 否则它将使用平台的默认编码,这种编码因机器而异,而大概数据的一种特定编码。如果你还不知道还有哪种编码,你需要找出答案。在那之前,你根本无法可靠地理解数据。

(顺便说一句,我希望你的真实代码没有空的catch块。)

答案 1 :(得分:3)

您可以在readLine课程中使用BufferedReader方法。

InputStream换成InputStreamReader,并将其打包在BufferedReader下:

InputStream is = clientSocket.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));

还请检查流的编码 - 您可能需要在InputStreamReader的构造函数中指定编码。