2017-01-16 4 views
-1

次のプロンプトでメソッドを記述する必要があります。 "findStringメソッドを記述します。このメソッドは、指定された開始点で という行を見つけるために長さ1の文字列を取ります。これは目的の文字列の位置を返します。これはStringクラスのindexOfメソッドとは異なります。文字列のインスタンスが1つだけである必要があります。したがって、文字列が2回以上連続して表示されても、それらの値は返されません。例では、行の値は "aabaccb"です。メソッドfindStringを使用して文字の単一のインスタンスを検索する

これは私が持っているものです。

public int findString(String str, int start) 
{ 
    int x = line.indexOf(str, start); 
    int length = line.length()-1; 
    int z = 0; 

    if (x > -1 && (x == length || (line.charAt(x) != line.charAt(x + 1)))) 
    { 
     return x; 
    } 

    if(x > -1 && (line.charAt(x) == line.charAt(x + 1))) 
    { 
     while (x > -1 && line.charAt(x) == line.charAt(x + 1)) 
     { 
      line = line.substring(x+2); 
      z+= 3; 
      x = line.indexOf(str); 
     } 
     return x+z; 
    } 
    else 
    { 
     return -1; 
    } 
} 

のjavaの私の知識が限られているとして、私は、長い時間のために、この方法で立ち往生してきました。助けを借りれば喜んでいただけると思います。私は、strが2回以上連続して発生した場合、どのように説明するのか分かりません。

+0

入出力の例はありますか? – Gatusko

答えて

1

したがって、同じ文字が前または後にない特定の文字の位置を見つける必要があります。

「単なる」ではない文字が見つかった場合は、そのまま検索することを意味します。ここで

は、テストが容易であるためにあなたのメソッドのシグネチャから外れた実装例です:

private static int findString(String line, char ch, int start) { 
    int idx = line.indexOf(ch, start); 
    while (idx != -1 && ((idx > 0 && line.charAt(idx - 1) == ch) || 
         (idx < line.length() - 1 && line.charAt(idx + 1) == ch))) 
     idx = line.indexOf(ch, idx + 1); 
    return idx; 
} 

テスト

System.out.println(findString("aabaccb", 'a', 0)); // prints: 3 
System.out.println(findString("aabaccb", 'b', 0)); // prints: 2 
System.out.println(findString("aabaccb", 'c', 0)); // prints: -1 
System.out.println(findString("aabaccb", 'a', 5)); // prints: -1 
System.out.println(findString("aabaccb", 'b', 5)); // prints: 6 
System.out.println(findString("aabaccb", 'c', 5)); // prints: -1 

最後のものはまだそれが開始cにもかかわらず拒否どのように注意してください最後の検索はcです。検索がシーケンスの最後の文字から始まるからといって、文字が突然「単独で」という意味ではありません。

関連する問題