2017-02-21 6 views
0

2文字の文字列passCodeのスペースの場所を印刷するコードを記述しようとしています。検出された各スペースは、改行が続く別のステートメントを出力しなければなりません。文字列内のスペースの場所を印刷するコードを書く

私はこのコードを書いており、passcode = "";

public class space{ 
    public static void main(String args[]) { 
    String passCode = ""; 
    passCode = "A "; 

    int p = passCode.length(); 

    /* 
    for(int i = 0; i < p; i++) { 
    int b = passCode.charAt(i); 
    if(Character.isWhitespace(b)){ 
     System.out.println("Space at " + passCode.indexOf(b)); 
    } 
    } 
    } 
    } 

しかし、私はpasscode = ""なら正しく評価する方法を見つけました。両方のインデックスがwhileループのために空白になっていないループの際にそれが動作する理由

int indexOfSpace = passCode.indexOf(" "); 

    while(indexOfSpace >= 0){ 

    System.out.println("Space at " + indexOfSpace); 
    indexOfSpace = passCode.indexOf(" ", indexOfSpace + 1); 

    } 

下に掲載 は、誰かが私に説明してくださいだろうか?

ありがとうございました

答えて

0

どちらの解決策も正しいですが、問題は印刷文です。つまり:

int b = passCode.charAt(i); 
System.out.println("Space at " + passCode.indexOf(b)); 

ここでは、指定したインデックスの文字を取得していますが、文字を使用して検索すると問題が発生します。 indexOf(char)は、その文字を含む最初のインデックスを返します。文字列には同じ文字が2つあるため、このインスタンスの最初のインデックスが常に返されます。代わりに、あなたのインデックスをプリントアウトする必要があります

System.out.println("Space at " + i); 
+0

はあなたが助けている感謝感謝します! – fijilemon12

0

これは動作しますが、非常に初歩的である:

import java.util.Scanner; 

public class FindSpaces { 
    public static void main (String [] args) { 
     String passCode = ""; 

     passCode = "A "; 
     boolean whitespaceAtZero = false; 
     boolean whitespaceAtOne = false; 

     whitespaceAtZero = Character.isWhitespace(passCode.charAt(0)); 
     whitespaceAtOne = Character.isWhitespace(passCode.charAt(1)); 

     if (whitespaceAtZero) { 
     System.out.println("Space at 0"); 
     } 
     if (whitespaceAtOne) { 
     System.out.println("Space at 1"); 
     } 

     return; 
    } 
} 
関連する問題