2013-03-01 116 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=""; 
} 
}