2016-03-26 7 views
3

私はコードを作成してユーザーにさまざまな質問をし、input.trim().isEmpty()メッセージがユーザーに与えられ、ユーザーに再度入力を要求するようにしました。したがって、ユーザーが空白を書き込むと、メッセージが与えられます。ユーザーが空白といくつかの文字を入力すると、それは受け入れられます。空白を削除してユーザーの入力を大文字にする

今、問題はWordの最初の文字を大文字にしたいということですが、実際には機能しません。ユーザーの入力が文字で始まる場合、それは大文字になります。しかし空白があれば、それは大文字にしません。

入力されているのであれば:

    katka

出力は次のとおりです。

katka

もう一つの例:

katka

出力は次のとおりです。

Katka

コードは次のとおり

String askWork = input.nextLine(); 

String workplace = askWork.trim().substring(0,1).toUpperCase() 
+ askWork.substring(1); 

ながら(askWork.trim()のisEmpty()){ 列askWork = input.nextLine()。

String workplace = askWork.trim().substring(0,1).toUpperCase() 
+ askWork.substring(1); 

}

私は別のアプローチが、なしの成功を試みました。

+0

"空白がある場合は大文字にしません。"あなたが望むのは 'String'の' trim() 'メソッドです。 (http://docs.oracle.com/javase/8/docs/api/java/lang/String.html#trim--) –

+2

最初の文字を大文字に変換してから、空白を削除します。最初に空白を削除するほうがはるかに意味があると思いませんか?それから、空白を大文字に変換しない(試してみる)でしょう。 – Tom

+0

私は同意します。私はaskWork.trim()を試しました。部分文字列(0,1).toUpperCase()+ askWork.substring(1);しかし、スレッド "main"の例外のようなエラーが発生します。java.lang.StringIndexOutofBoundsException:文字列インデックスが範囲外です。入力が空白のみの場合は1が与えられます。しかし、入力に文字が含まれていれば、それは優れています。私は理由を理解できません。 – Ilja

答えて

3

trim() method on Stringは、先頭と末尾の空白をすべてクリアします。 Stringをトリミングした後は、新しいStringになり、それ以降参照するすべてのインデックスが正確になります。 replaceAll("\\s","")は必要ありません。空の入力をテストするロジックも必要です。そのためにisEmpty() method on Stringを使用します。私は、おもちゃmain()を書いたことがあります。それは単語を求め続け、それが得られたらそれを大文字にして印刷します。これは、部分文字列なしなど

public static void main(String[] args) throws Exception { 

     BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); 

     String askWork = ""; 
     while (askWork.isEmpty()) { 
      System.out.println("Enter a word:"); 
      askWork = input.readLine().trim(); 
     } 

     String workPlace = askWork.substring(0,1).toUpperCase() + askWork.substring(1); 

     System.out.println(workPlace); 
    } 
+0

お返事ありがとうございます。私はあなたのコードを試して、そこに文字があった場合、それは素晴らしい仕事をした。入力に空白しかない場合、エラーが発生しました:スレッド "main"の例外java.lang.StringIndexOutofBoundsException:文字列インデックスが範囲外です:1.コードに間違っているものがありますか?私は私の質問を更新します。 – Ilja

+0

この問題に対処するために書き直しました。 –

+1

ありがとうございます! – Ilja

0

あなたは、その内容を操作開始する前に入力をトリミングする必要があります。

String askWork = input.nextLine().trim(); 

String workplace = askWork.substring(0,1).toUpperCase() + askWork.substring(1); 
1

はそれを活用しようとする前に、空白を削除するために、あなたの入力をトリミングしてみます。 (入力のみ空白がある場合

String askWork = input.nextLine().trim(); 
String capitalized = askWork.substring(0, 1).toUpperCase() + askWork.substring(1) 

しかし、これはtrim()は、空の文字列("")に設定されているaskWorkと呼ばれているので、後IndexOutOfBoundsExceptionになります、あなたは、空の最初の文字にアクセスしよう長さ0)の文字列。

String askWork = input.nextLine().trim(); 
if(askWork.isEmpty()) { 
    // Display error 
    JOptionPane.showMessageDialog(null, "Bad!"); 
else { 
    String capitalized = askWork.substring(0, 1).toUpperCase() + askWork.substring(1) 
    JOptionPane.showMessageDialog(null, "It worked! -- " + capitalized); 
} 
0

別の解決策空白の入力、文字なしで入力、をテストします:

public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 

    String askWork = input.nextLine().trim(); 

    while (askWork.isEmpty()) 
     askWork = input.nextLine().trim(); 

    char[] workChars = askWork.toCharArray(); 
    workChars[0] = workChars[0].toUpperCase(); 

    String workplace = String.valueOf(workChars); 

    // Work with workplace 

    input.close(); 
} 
4

を問題は、大文字に変換しながら、あなたが参照するすべてのインデックスとして空白であります正確ではない。 最初にtrim()を実行すると、先頭と末尾の空白をすべてクリアして大文字にすることができます。 例外を避けるために、空の文字列とすべての空白をよく確認する。

String askWork = input.nextLine().trim(); 
String capitalized = askWork.substring(0, 1).toUpperCase() + askWork.substring(1) 
関連する問題