-1

私がやろうとしているのは、文字列と文字をパラメーターとして持つメソッドを作成することです。メソッドは文字列を取得して、指定された文字を検索します。文字列にその文字が含まれている場合、文字が表示された場所の整数の配列を返します。これが私がこれまでに持っているものです:

public class Sheet {
public static void main(String[] args) {
    String string = "bbnnbb";
    String complete = null;
    //*******
    for(int i = 0; i < string.length(); i++){
        complete = StringSearch(string,'n').toString();
    }
            //********
}

public static int[] StringSearch(String string, char lookfor) {
    int[]num = new int[string.length()];
    for(int i = 0; i < num.length; i++){
        if(string.charAt(i)== lookfor){
            num[i] = i;
        }
    }
    return num;
}

}

メソッドは正常に動作し、これを返します。

0
0
2
3
0
0

私がやろうとしているのは、それらを1つの文字列にすることで、この「002300」のようになります。これを行う方法はありますか?コードのスター付きの領域で実行しようとしましたが、成功しませんでした。

4

4 に答える 4

5

ただする

StringBuffer strBuff = new StringBuffer();
for(int i = 0; i<str.length(); i++)
{
    if(str.charAt(i) == reqChar)
    {
        strBuff.append(str.charAt(i));
    }
    else
    {
        strBuff.append('0');
    }
}
return str.toString();
于 2012-04-06T21:01:02.410 に答える
1

StringBuilderより良いプラクティスのために更新されました。

public static String StringSearch(String string, char lookfor) {
    StringBuilder sb = new StringBuilder();

    for(int i = 0; i < string.length; i++){
        if(string.charAt(i) == lookfor)
            sb.append(i);
        else
            sb.append("0");
    }
    return sb.toString();
}

次に、for ループなしで 1 回だけ呼び出すことができます。文字列内のすべての文字に対して呼び出す理由がわかりません。

complete = StringSearch(string,'n');
于 2012-04-06T21:03:41.093 に答える
1

+=演算子を使用して、結果を既存の文字列に追加するだけです

String complete = "";
for(...)
    complete += StringSearch(string,'n').toString();
于 2012-04-06T20:59:39.523 に答える
1

私はJavaの正規表現ライブラリを使用するだけで、より柔軟になります(たとえば、複数の文字を探したい場合)。さらに、高度に最適化されています。

StringBuilder positions = "";

Pattern pattern = Pattern.compile(string);
Matcher matcher = pattern.matcher(lookfor);
while(matcher.find()){
    positions.append(matcher.start());
}

return positions;
于 2012-04-06T21:06:57.163 に答える