繁体   English   中英

是否有更清洁/更好的方式来写这个

[英]Would there be a cleaner/better way to write this

代码是从文件中读取信息,使用该信息创建对象,然后将其添加到名为servers的ArrayList中。

    try {
        BufferedReader br = new BufferedReader(new InputStreamReader(openFileInput(MainActivity.FILE_SERVERS)));
        String line = "";
        while ((line = br.readLine()) != null) {
            String name = "";
            String ip = "";
            String port = "";
            String checkFrequency = "";
            int counter = 1;
            boolean alert = true;
            for (String value : line.split(",")){
                if (counter == 1){
                    name = value;
                }else if (counter == 2){
                    ip = value;
                }else if (counter == 3){
                    port = value;
                }else if (counter == 4){
                    checkFrequency = value;
                }else if (counter == 5){
                    alert = Boolean.parseBoolean(value);
                }
                counter++;
            }           
            MCServer server = new MCServer(name, ip, port, checkFrequency, alert);
            servers.add(server);
        }
        br.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

存储在文件中的示例行:

Name,199.99.99.99,80,60,true

是否有更好的方法来检索该信息,以便能够将其存储在正确的变量中,而无需使用带有计数器的循环,如上所示?

关于什么:

try (BufferedReader br = new BufferedReader(
       new InputStreamReader(openFileInput(MainActivity.FILE_SERVERS)))) {
    String line = null;  // start with null in case there is no line
    while ((line = br.readLine()) != null) {
        String[] tokens = line.split(",");
        MCServer server = 
            new MCServer(tokens[0], tokens[1], tokens[2], tokens[3], 
              Boolean.parseBoolean(tokens[4]));
        servers.add(server);
    }
}

您可以忽略计数器并直接使用令牌,但至少应该确保有足够的令牌:

try
{
  BufferedReader br = new BufferedReader(new InputStreamReader());
  String line = null;
  String[] tokens;
  while ((line = br.readLine()) != null) {
     tokens = line.split(",");
     MCServer test = new MCServer(tokens[0],tokens[1],tokens[2],tokens[3],Boolean.valueOf(tokens[4]));
  }
}
catch (IndexOutOfBoundsException e) { // <- be sure to catch this
  // not enough elements in array
}

此外,您将字符串作为IP地址和端口传递,它们是字符串,但应检查它们是否可转换,因此您可以使用Integer.valueOf(tokens[2]) ,例如只是为了引发NumberFormatException

尝试这个

 try {
    BufferedReader br = new BufferedReader(new InputStreamReader(openFileInput(MainActivity.FILE_SERVERS)));
    String line = "";
    while ((line = br.readLine()) != null) {
        String name = "";
        String ip = "";
        String port = "";
        String checkFrequency = "";
        int counter = 1;
        boolean alert = true;

        String s[] = line.split(",");
        name = s[0];
        ip = s[1];
        port = s[2];
        checkFrequency= s[3];
        alert = s[4];

        MCServer server = new MCServer(name, ip, port, checkFrequency, alert);
        servers.add(server);
    }
    br.close();
} catch (FileNotFoundException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

我已经修改了你的代码:

try {
        BufferedReader br = new BufferedReader(new InputStreamReader(openFileInput(MainActivity.FILE_SERVERS)));
        String line;
        while ((line = br.readLine()) != null) {

            String[] lineSplitted = line.split(",");

            String name = lineSplitted[0];
            String ip = lineSplitted[1];
            String port = lineSplitted[2];
            String checkFrequency = lineSplitted[3];
            boolean alert = Boolean.parseBoolean(lineSplitted[4]);

            MCServer server = new MCServer(name, ip, port, checkFrequency, alert);
            servers.add(server);
        }
        br.close();
    } catch (IOException e) {
        e.printStackTrace();
    }

变化:

  • 初始化变量然后设置它们是多余的,你不会事先设置它们就可以访问它们,所以如果你先把线分开,你可以立即用值初始化它们。

  • 如果每次使用单个数组,只需访问数组的正确元素,就不需要循环

  • 捕获块可能会崩溃; IOException涵盖FileNotFoundException

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM