1

1、2、X の 3 文字の文字列があります。文字列が 12、1X、2X などの場合もあります。

入力文字の位置に基づいて「-」を追加したいと思います。たとえば、1 を取得した場合、結果は 1--、X を取得した場合、結果は --X、2X を取得した場合、結果は -2X になります。

私のアプローチは、2^n 選択のステート マシンを使用することですが、スマートなアプローチとより良いアプローチを探しています。

その他の例

Input 1    2    X  2X
Ouput 1-- -2- --X -2X
4

3 に答える 3

6

次を使用して、入力文字列に文字が含まれているかどうかを確認できますString.contains()

String in = "12X";

String out;

out  = in.contains("1") ? "1" : "-";
out += in.contains("2") ? "2" : "-";
out += in.contains("X") ? "X" : "-";

これにより、望ましい結果が得られます。

(in)    (out)
1       1--
12      12-
1X      1-X
X21     12X
X       --X

コメントで指摘されているように、これはより効率的です。

String in = "12X";

String out;

out  = ( in.contains("1") ? "1" : "-" )
     + ( in.contains("2") ? "2" : "-" )
     + ( in.contains("X") ? "X" : "-" );
于 2013-08-05T11:38:24.067 に答える
3

これは 1 つのアプローチです。その利点は、サポートされるシンボルの数に対してコードのサイズが一定であることです。

final String x = "12X";
final char[] out = new char[x.length()];
Arrays.fill(out, '-');
for (int i = 0; i < input.length(); i++) {
   final char c = input.charAt(i);
   out[x.indexOf(c)] = c;
}
System.out.println(new String(out));
于 2013-08-05T11:45:54.393 に答える
1
public static String getStringWithDashes(String input)
{
    final char result[] = "---";
    if (input.contains("1"))
    {
        result[0] == '1';
    }
    if (input.contains("2"))
    {
        result[1] == '2';
    }
    if (input.contains("X"))
    {
        result[2] == 'X';
    }
    return new String(result);
}
于 2013-08-05T11:49:43.860 に答える