0

次の形式の文字列を読んでいます:ID名(ミドルネームを含む)家系の名前birthYear

例えば

722デビッド・ベッカム1975

今、私は単にこのコードを使用しています:

ID = scannerStr.nextInt();

FirstName = scannerStr.next();

LastName = scannerStr.next();

BirthYr = scannerStr.nextInt();

しかし、ミドルネームの人が現れると、これは失敗します...たとえば

100デビッド・ロバート・ジョセフ・ベッカム1958

これを誰かを修正する方法は?読んだものが単語か整数かを確認するにはどうすればよいですか?

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]);

nullセーフな文字列操作については、 Apache CommonsLangStringUtilsクラスを確認してください。

于 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 に答える