我正在阅读以下格式的字符串: ID名字(包含中间名)姓氏birthYear
例如
722 David Beckham 1975
现在我只是使用这段代码:
ID = scannerStr.nextInt();
FirstName = scannerStr.next();
LastName = scannerStr.next();
BirthYr = scannerStr.nextInt();
但是当你看到有中间名的人出现时,这就失败了...... 例如
100大卫罗伯特约瑟夫贝克汉姆1958年
如何解决这个问题?如何检查我读的是单词还是int?
答案 0 :(得分: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类以获取空安全字符串操作。
答案 1 :(得分: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="";
}
}