如何从String Array

时间:2015-09-12 13:51:02

标签: java

我正在使用以下代码,这给了我在数组的每个位置的重复值 所以建议我做什么

String sCurrentLine;
String username[] = new String[30];
String Arrival[] = new String[30];
String Departure[] = new String[30];
int var = 0, var2;
BufferedReader br = new BufferedReader(new FileReader("E:\\Shubham Projects\\Input.txt"));

while ((sCurrentLine = br.readLine()) != null) {
    String[] information = sCurrentLine.split(" ");
    var2 = information.length + var;
    for (int i = var; i < var2; i++) {
        System.out.println(i);
        username[i] = information[0];
        Arrival[i] = information[1];
        Departure[i] = information[2];
        var++;
    }

}
for (int i = 0; i < username.length; i++)
    System.out.println(username[i] + " " + Arrival[i] + " " + Departure[i]);

输入:

  

Jai 10:15 11:10
  Jai 10:10 11:00
  Veeru 10:10 11:00
  Veeru 16:30 18:45
  Jai 12:05 12:30
  Veeru 12:30 13:25
  Veeru 12:45 13:25
  Jai 17:25 18:01

输出:

  

Jai 10:15 11:10
  Jai 10:15 11:10
  Jai 10:15 11:10
  Jai 10:10 11:00
  Jai 10:10 11:00
  Jai 10:10 11:00
  Veeru 10:10 11:00
  Veeru 10:10 11:00
  Veeru 10:10 11:00
  Veeru 16:30 18:45
  Veeru 16:30 18:45
  Veeru 16:30 18:45
  Jai 12:05 12:30
  Jai 12:05 12:30
  Jai 12:05 12:30
  Veeru 12:30 13:25
  Veeru 12:30 13:25
  Veeru 12:30 13:25
  Veeru 12:45 13:25
  Veeru 12:45 13:25
  Veeru 12:45 13:25
  Jai 17:25 18:01
  Jai 17:25 18:01
  Jai 17:25 18:01
  null null null
  null null null
  null null null
  null null null
  null null null
  null null null

3 个答案:

答案 0 :(得分:2)

您可以使用Set数据结构,不允许重复。

尝试:

    Set<String> resultSet = new HashSet<String>(Arrays.asList(username));

resultSet将拥有唯一的字符串。

答案 1 :(得分:1)

Inner for循环导致了这个问题,因为你要从每一行抓取信息三次。

var2 = information.length + var;
for (int i = var; i < var2; i++) {
    System.out.println(i);
    username[i] = information[0];
    Arrival[i] = information[1];
    Departure[i] = information[2];
    var++;
}

例如:

  

Jai 10:15 11:10

读取此行时,var2将计算为3(假设var为0)。现在它将在for循环中运行三次,为您提供重复的条目。

Shriram的解决方案将解决此问题,Amila的回复将解决输入文件中重复条目的问题。

答案 2 :(得分:0)

使用set并打印结果,因为Set不允许重复。

使用以下逻辑

int count = 0;
        while ((sCurrentLine = br.readLine()) != null) {
            String[] information = sCurrentLine.split(" ");
            // for (int i = 0; i < information.length; i++) {
            username[count] = information[0];
            Arrival[count] = information[1];
            Departure[count] = information[2];
            // }
            count++;
        }

打印输出后,剩余的空值只不过是你已经使用30的初始化字符串数组。使用动态数组的集合类。另外我说使用Set来避免重复