-8

2 つの文字列を引数として受け入れるメソッドを作成しようとしています。最初の文字列はフレーズになり、2 番目の文字列もフレーズになります。メソッドで実行したいのは、一致する文字について両方の文字列を比較することです。文字列 2 に文字列 1 で見つかった文字がある場合、文字列 2 の文字のインスタンスをアンダースコアに置き換えます。

例:

これは入力です:

phrase1 = "String 1"
phrase2 = "Strone 2"

出力文字列が呼び出さnewPhraseれ、アンダースコアから構築された文字列が含まれます。

newPhrase = "___one 2"

それは私にとってはうまくいきません。私は何か間違ったことをしています。

public class DashedPhrase
{
public static void main(String[] args)
{
    dashedHelp("ABCDE","ABDC");
}

public static String dashedHelp(String phrase1, String phrase2) 
{
    String newPhrase = "_";

    for(int i = 0; i < phrase.length(); i++)
    {
        if(phrase.charAt(i) == phrase2.charAt(i))
        {
            newPhrase.charAt(i) += phrase2.charAt(i);
        }

    }

    System.out.print(newPhrase);
    return newPhrase;
}
}
4

4 に答える 4

2

理解しやすくするために、StringBuilderとそのメソッドを使用できますsetCharAt()

ループi < phrase1.length() && i < phrase2.length()の条件に注目してください。forこれは、例外が発生しないようにするためですArrayIndexOutOfBounds

public static void main(String[] args)
{
    System.out.println("ABCDE");
    System.out.println("ABDC");
    dashedHelp("ABCDE","ABDC");
    System.out.println();
    System.out.println();
    System.out.println("String 1");
    System.out.println("Strone 2");
    String phrase1 = "String 1";
    String phrase2 = "Strone 2";
    dashedHelp(phrase1, phrase2);
}

public static String dashedHelp(String phrase1, String phrase2) 
{
    StringBuilder newPhrase = new StringBuilder(phrase1);
    for(int i = 0; i < phrase1.length() && i < phrase2.length(); i++)
    {
        if(phrase1.charAt(i) == phrase2.charAt(i))
        {
            newPhrase.setCharAt(i, '_');
        }
    }
    System.out.print(newPhrase);
    return newPhrase.toString();
}

出力:

ABCDE
ABDC
__CDE

String 1
Strone 2
___i_g_1
于 2013-05-20T20:46:37.940 に答える
0

newPhrase.charAt(i)文字を置き換えることはできません。文字を返すだけです。Java の文字列は不変です。変更したい場合は、StringBuilderを使用する必要があります。メソッドを調べreplace(int start, int end, String str)ます。

于 2013-05-20T20:44:28.653 に答える
0

と同じ長さの文字列を返す必要があるため、phrase2の各文字を反復処理しphrase2、両方のフレーズの一致する文字を置き換える必要があります。もちろん、phrase2が よりも長い場合はphrase1、残りの文字を回答に含める必要があります。これを試すことができます:

public static String dashedHelp(String phrase1, String phrase2) {
    String ans = "";
    String subChar = "_";
    int i;
    for(i = 0; i<phrase2.length(); i++) {
        if(i<phrase1.length() && phrase1.charAt(i) == phrase2.charAt(i))
            ans += subChar;
        else
            ans += phrase2.charAt(i);
    }
    return ans;
}

それが役に立てば幸い


もちろん、等しい文字phrase1の場所にアンダースコアを付けて出力する必要がある場合は、上記のコードでとphrase2交換できます。phrase2phrase1


テストする

完全なクラスは次のようになります。

public class MyClass {
    public static String dashedHelp(String phrase1, String phrase2) {
        // The method code goes here
    }
    public static void main(String[] args) {
        System.out.println(dashedHelp("String 1", "Strone 2"));
    }
}

このプログラムの出力は___o_e_2. これは、目的の出力と (ほぼ) 一致します。

于 2013-05-20T20:52:42.677 に答える
-2

例のコードはコンパイルさえしません。

newPhrase.charAt(i) += phrase2.charAt(i);

それは悪い割り当てです。書いてるのと同じだ

newPhrase.charAt(i) = newPhrase.charAt(i) + phrase2.charAt(i);

しかし、「=」の左側の式は、適切に値を割り当てることができるものではありません。

于 2013-05-20T20:44:54.567 に答える