我有一个包含以下信息的文件,例如:
用户:James Latitude:1.0经度:2。0日期:星期一9月16日22:15:48 CEST 2013
用户:Romio Latitude:11.0经度:2。0日期:星期一9月16日22:15:48 CEST 2013
用户:“Sander”纬度:-1.0经度:28。0日期:星期一9月16日22:15:48 CEST 2013
我想得到这些名字: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。也许我需要在文件中引入一些额外的符号/表达式,以便更容易拆分? 我完全听取了建议。
由于
答案 0 :(得分:1)
您可以使用正则表达式查找" User:"之间的任何单词字符。和" Latitude",接受可选的空格和双引号,如下:
// 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