2013-03-01 117 views
0

我读有以下格式的字符串: ID名(含中间名)姓birthYear检查字符串或INT

例如

722大卫·贝克汉姆1975

现在我“M简单地使用此代码:

ID = scannerStr.nextInt(); 

FirstName = scannerStr.next(); 

LastName = scannerStr.next(); 

BirthYr = scannerStr.nextInt(); 

但是你看,当人们用中间名显示出来,失败...... 对于为例e

100 David Robert Joseph Beckham 1958

如何解决这个问题?我如何检查我读的是一个单词还是int?

+3

阅读限制。解析。 – 2013-03-01 19:15:32

+0

如何检查我读取的是单词还是int? @BrianRoach – Arch1tect 2013-03-01 19:18:50

+0

你的“格式”里面有逗号,而你的数据没有。这...似乎是一个问题。 – geoffspear 2013-03-01 19:19:52

回答

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类为null安全字符串操作。

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=""; 
} 
}