0

我有一个包含以下信息的文件,例如:

用户:James 纬度:1.0 经度:2.0 日期:2013 年 9 月 16 日星期一 22:15:48 CEST

用户:Romio 纬度:11.0 经度:2.0 日期:2013 年 9 月 16 日星期一 22:15:48 CEST

用户:“Sander” 纬度:-1.0 经度:28.0 日期:2013 年 9 月 16 日星期一 22:15:48 CEST

我想得到这些名字:James、Romio 和 Sander,暂时没有别的。我怎样才能做到这一点?我尝试使用 split 和 indexOf 方法,但我用错了。这是我多次删除后剩余的一些代码:

public boolean uniqueUserName(String userName) {
    String[] currentName = null;
    String nameToValidate = null;

    int i = 0;

    try {
        while(reader.readLine() != null) {
            currentName = reader.readLine().split(":");             
            nameToValidate = currentName[i++];  

            if(nameToValidate.equals(userName)) {
                return false;
            }

            System.out.println("Names: " + nameToValidate);
        }

    } catch (IOException e) {
        e.printStackTrace();
    }       
    return true;
}

我知道在使用拆分时我没有得到名称,我最终得到了一个 NullPointer。也许我需要在文件中引入一些额外的符号/表达式,以便更容易拆分?我很乐意听取建议。

谢谢

4

1 回答 1

1

您可以使用正则表达式来查找“用户:”和“纬度”之间的任何单词字符,接受可选的空格和双引号,例如:

// input Strings
String james = "User: James Latitude: 1.0 Longitude: 2.0 Date: Mon Sep 16 22:15:48 CEST 2013";
String romio = "User: Romio Latitude: 11.0 Longitude: 2.0 Date: Mon Sep 16 22:15:48 CEST 2013";
String sander = "User: \"Sander\" Latitude: -1.0 Longitude: 28.0 Date: Mon Sep 16 22:15:48 CEST 2013";

// Pattern:                                group 
//                                          for
//                                         name
Pattern p = Pattern.compile("User:\\s+?\"?(\\w+?)\"?\\s+?Latitude");
// Matching...
Matcher m = p.matcher(james);
if (m.find()) {
// If found, referencing group 1 and printing it
    System.out.println(m.group(1));
}
// Etc...
m = p.matcher(romio);
if (m.find()) {
    System.out.println(m.group(1));
}
m = p.matcher(sander);
if (m.find()) {
    System.out.println(m.group(1));
}

输出:

James
Romio
Sander
于 2013-09-17T06:19:10.077 回答