0

我正在读取具有以下格式的字符串:ID First Name(contain Middle Name) Last NamebirthYear

例如

722 大卫贝克汉姆 1975

现在我只是使用这个代码:

ID = scannerStr.nextInt();

FirstName = scannerStr.next();

LastName = scannerStr.next();

BirthYr = scannerStr.nextInt();

但是你会看到当有中间名的人出现时,这会失败......例如

100 大卫·罗伯特·约瑟夫·贝克汉姆 1958

如何解决这个问题?如何检查我阅读的内容是 word 还是 int?

4

2 回答 2

1

您对输入的建模不正确。

您当前的模型(如您的代码中所示)是这样的:

int string string int

您输入的真实模型似乎是这样的:

int string (string)* string int

您可以使用正确解析它String.split()

String[] tokens = inputString.split(" ");

actorId = Integer.valueOf(tokens[0]);
actorFirstName = tokens[1];
actorLastName = tokens[tokens.length - 2];
actorBirthYear = Integer.valueOf(tokens[tokens.length - 1]);

查看Apache Commons Lang StringUtils 类以进行空安全字符串操作。

于 2013-03-01T19:21:41.857 回答
1

IMO最好的解决方案是将所有内容拆分并将每个单词保存在一个字符串数组中,最后一个单词将是一个数字,第一个将是一个id,您可以知道最后一个单词之前的单词是姓氏,其余的是只是名字!代码未经测试,此代码可以拆分文本上的第一个单词,将其应用于整个字符串,您就完成了!

boolean flag = true;
String someWord ="";
int j = 0;
int i = 0;
String[] wordCollector;
while (flag) {
 if (word.substring(i,i+1).equals(" ")) {
  someWord = someWord + word.substring(i,i+1);
  i++;
 }
 else {
 wordCollector[j] = 
 j++;
 flag = false;
 someWord="";
 }
}
于 2013-03-01T19:28:17.650 回答