2017-05-10 20 views
0

私は、与えられた文字列のインデックスを表示するメソッドを持っています。 Stringに指定された文字が含まれていない場合、結果は-1になります。 私のコードは次のようになります。このような状況で文字列内の文字の位置を出力する

public static int strpos(String text, char z) { 

    int x = 0; 

    char[] array = text.toCharArray(); 
    for (int i = 0; i < array.length; i++) { 
     if (array[i] == z) { 
      x = i; 
      break; 
     } else { 
      x = -1; 
     } 
    } 
    return x; 
} 

public static void main(String[] args) { 
    System.out.println(strpos("abcdefghc", 'c')); 
} 

結果はある、と私はブレークを削除した場合、結果はです。どのように私は2と8の両方の結果を得るために私のコードをmodyfiできますか?

+0

あなたは 'String.indexOf(文字)'メソッドを使用してみました? –

答えて

0

両方の結果を1回返すことはできません。
ただし、ArrayList<Integer>を返すことはできます。あなたがする必要があります

  • は、関数の先頭にリストを初期化します。
  • 番号を見つけるたびに、addあなたのリストを破る代わりに、番号を見つけます。
  • 検索が終了したら、リストを返します。

これは、複数の値を簡単に返す方法です。

また、なぜelseがありますか?

+0

指定されたcharが文字列にない場合は-1を出力します。 –

+0

@PiotrWanjasメソッド 'c'と文字列 'abcdefgch'を 'break'なしでテストします。あなたは7を取得する必要がありますが、そのelseのために-1が得られます。-1は間違いなく現れますが、そこには表示されません。 – Neo

+0

下に私の現在のコードを掲載しました。 –

0

一つの解決策は、List<Integer>のインデックスを保存し、それを返すようにする方法を変更するには、次のようになります。

public static List<Integer> strpos(String text, char z) { 
    List<Integer> indices = new ArrayList<>(); 

    char[] array = text.toCharArray(); 

    for (int i = 0; i < array.length; i++) { 
     if (array[i] != z) { 
      continue; 
     } 

     list.add(i); 
    } 

    return indices.isEmpty() ? Arrays.asList(-1) : indices; 
} 
+1

それが同じならば、リストに追加するほうが簡単ではありませんか? – Neo

+0

@ネオ私は混乱しています、それは私がやっていることです。 –

+1

論理的にはyesですが、charが 'z'と異なる場合は' continue'で実装します。それが 'z'と等しいかどうかをチェックして、それがyesの場合に追加する方が簡単でしょうか? 'continue'は必要なく、行は少なく、読みやすい。 – Neo

0

あなたはList<Integer>に戻り値の型を変更して、リスト内のすべての一致指数を収集することができます(または別のあなたの選択のコレクション)。 その場合、文字列に文字列が存在しないことを示す特別な値として-1を使用する代わりに、空リストを代わりに返す代わりに、 を自然に返します。

ここではそれを実装する1つの方法です:Javaの8ストリームせずに、

また
List<Integer> strpos(String text, char z) { 
    return IntStream.range(0, text.length()) 
      .filter(i -> text.charAt(i) == z) 
      .boxed() 
      .collect(Collectors.toList()); 
} 

が、.indexOfの恩恵を受け:

List<Integer> strpos(String text, char z) { 
    List<Integer> indexes = new ArrayList<>(); 
    int index = -1; 
    while (true) { 
     index = text.indexOf(z, index + 1); 
     if (index == -1) { 
      break; 
     } 
     indexes.add(index); 
    } 
    return indexes; 
} 
関連する問題