2012-03-07 18 views
3

私はクラスを2つ欠場しているので、私が取っているクラスのために何かをすることに問題があります。 (私はそれが「誰かの宿題を行う」へに見下ろしていますが、私はそれを探していないよ知っている。)Javaで文字列形式をチェックしていますか?

次のように割り当てがある:

は、次の操作を行うためのプログラムを書く:

  • 誰かのファーストネーム、ミドルネーム、ラストネームを(大文字と小文字の任意の組み合わせを使用して)単一の文字列として入力するように要求します。
  • 名前が正しい形式で入力されていることを確認してください(スペースで区切った3つの名前)。入力が正しくない場合は、フォーマットが正しくなるまで入力を再要求し続けます。
  • 名前の各部分の最初の文字のみを大文字にして、改訂された名前を印刷します。
  • その名前のイニシャルを印刷します。
  • 姓、名、MIの形式で名前を印刷します。

私が持っている主な問題は、割り当ての2番目の部分です。私は最初の部分を手に入れました。そして、私は2番目のセットアップをした後、残りの部分を管理することができます。

import java.util.*; 

public class TestStrings 
{ 
public static void main(String[] args) 
{ 
    Scanner key = new Scanner(System.in); 
    String name; 
    System.out.print("Enter your name as 'First Middle Last': "); 
    name = key.nextLine(); 




} 
} 

私が集めたことから、string.splitを使用する必要がありますか?しかし、私は3つのスペースがあることを確認する必要があるので、これについてどうやって行くのかは分かりません。 "John(three spaces)Doe"のように、互いに隣り合っていなくてもかまいません。名前の入力を調べるために何らかのループが発生すると思います。

catch 22は、配列やStringTokenizerを使用できないということです。私は部分文字列メソッドを使用する必要があります。

ご協力いただければ幸いです。ありがとう。 :D

+3

私は他の誰かの宿題をするのが大好きではありませんが。 Stringクラスのメソッドを参照してください。http://docs.oracle.com/javase/6/docs/api/java/lang/String.html部分文字列とindexofメソッドに注意してください。 –

+1

正規表現を見て、それは学校の後に長い時間あなたの友人になります – bluesman

+0

@スチーブンヒッキーあなたは間違いなく私のコードを試してください。 – Juvanis

答えて

0

StringクラスのサブストリングとindexOf関数を使用して、必要なものを取得することができます。

String#indexOf:String内のStringの位置を取得します。

String#substring:Stringに含まれる部分文字列を取得します。

String s = "Luiggi Mendoza J."; 
String x; 
while(s.indexOf(" ") > 0) { 
    x = s.substring(0, s.indexOf(" ")); 
    System.out.println(x); 
    s = s.substring(s.indexOf(" ") + 1); 
} 
x = s; 
System.out.println(x); 

プログラムの出力は次のようになります。

Luiggi 
Mendoza 
J. 
+1

OPは、彼は配列を使うことができず、代わりに部分文字列メソッドを使う必要があると言いました。 – jzworkman

+0

@jzworkmanはい私は最後に、私の答えを編集した –

5

(あなたは配列を使用傾けるので)最初の名前を見つけるために、正しい方向を指すように:

String firstName = input.substring(0, input.indexOf(" ")); 

これが得ます開始から最初のスペースまでの部分文字列です。 indexOfメソッドと部分文字列メソッドを調べるなら、そこから行くことができるはずです。

+1

+1 OPの質問を読んで彼のために彼の割り当てをしていない –

0

、文字列の3つの部分を確認するsplit()関数を使用し、連続的にユーザは、単一の空白文字' '介して区切られている3つの部分から構成された文字列を入力したかどうかを確認するために、whileループを使用します。ここに示されたようにsubstring()を使用することにより、別々の名前を取得することができます:

public static void main (String [] args) 
{ 
    String name = ""; 
    boolean ok = false; 
    Scanner key = new Scanner(System.in); 

    while (!ok) 
    { 
     System.out.print("Enter your name as 'First Middle Last': "); 
     name = key.nextLine(); 
     try 
     { 
      if (name.split(" ").length == 3) 
       ok = true; 
     } 
     catch (Exception e){ } 
    } 

    if (ok) 
    { 
     String firstName = name.substring(0, name.indexOf(" ")); 
     String middleName = name.substring(firstName.length()+1, 
             name.lastIndexOf(" ")); 
     String surname = name.substring(middleName.length()+firstName.length()+2, 
            name.length()); 
    } 
} 
+0

OPの完全な質問を読んで、彼は配列を使用することはできませんと部分文字列を使用する必要があります。 – jzworkman

+0

@jzworkmanが私の答えを編集しました。 – Juvanis

0

これはパターン/マッチャーとregexsを使用して動作します。また、調整時に長さ1の弦を守ります。

private static String properCase(String str) { 
    return str.substring(0, 1).toUpperCase() 
      + (str.length() >= 1 ? str.substring(1).toLowerCase() : ""); 
} 

public static void main(String[] args) { 

    boolean found = false; 
    do { 
     Scanner scanner = new Scanner(System.in); 
     System.out.print("Enter your name as 'First Middle Last': "); 
     Pattern p = Pattern.compile("\\s*(\\w+?)\\s(\\w+?)\\s(\\w+)+\\s*"); 
     Matcher m = p.matcher(scanner.nextLine()); 
     found = m.find(); 
     if (found) { 
      String first = m.group(1); 
      String middle = m.group(2); 
      String last = m.group(3); 

      String revised = properCase(first) + " " + properCase(middle) 
        + " " + properCase(last); 

      System.out.println(revised); 
      System.out 
        .printf("%s %s %s.\n", properCase(last), 
          properCase(first), middle.substring(0, 1) 
            .toUpperCase()); 
     } 
    } while (!found); 
} 
関連する問題