0

2 つの文字列のダッシュを比較するプログラムを Java で作成する必要があります。テストは、各文字列が文字列内の同じ位置に同じ量のダッシュを持っている場合にのみ true を返します。

例:

次の 2 つの文字列の比較

String string1 = "two-twenty-nine"
String string2 = "10-45 お腹がすいた。"

上記の条件では true が返されます。一方のストリングが他方より長いかどうかは問題ではありません。

任意の支援をいただければ幸いです!

私は試しました:
- 文字列を char 配列に変換してからインデックスを比較する
- 各文字列に String.indexOf() を使用し、前のダッシュのインデックスを新しいものとして変数 int newStart = String.indexOf() を作成する見る出発点

`   public static void sameDashes(String string1, String string2) {
    int count = 0;
    char index1 = ' ';
    char index2 = ' ';
    char dash = '-';
    char[] string1Array = string1.toCharArray();
    char[] string2Array = string2.toCharArray();
    while (count < string1Array.length && count < string2Array.length) {
        if (string1Array[index1] == dash && string2Array[index2] == dash) {
            System.out.println("true");
        }
    }
}
4

5 に答える 5

4

これは宿題だと思うので、解決策の概要を説明します。

  • メソッドを使用してstring1を反復処理し、ダッシュの位置を表すsのaを取得します。indexOfListInteger
  • 同じ方法でstring2を繰り返します。(一般的なメソッドを2回呼び出すことができます。1回はstring1で、もう1回はstring2で呼び出します。)
  • あなたのを比較し、Listそれらが同じであるかどうかを確認してくださいsize()
  • それらが同じサイズの場合は、両方のリストをループして、位置が同じかどうかを確認します。
于 2012-08-20T19:12:26.570 に答える
1

使用して超簡単String.split

  1. 両方の文字列の両端を 1 文字で埋めます (つまりstr = " " + str + " ")。
  2. .split("-")両方の文字列を呼び出し、結果の配列を格納します。
  3. 配列の長さが異なる場合、文字列は一致しません。
  4. それ以外の場合は、各配列内の対応する文字列の長さを比較し、いずれかのペアの長さが一致しない場合、文字列は一致しません。それが文字列の最後のペアであった場合を除き、長さが異なっていても一致します (つまり、文字列の最後のペアを無視するだけです。配列の最後のインデックスで文字列を比較する必要はありません)。
  5. それ以外の場合、2 つの文字列は一致します。
于 2012-08-20T20:00:59.677 に答える
0

この問題を解決する簡単なアルゴリズムは、文字列のインスタンスの1つを使用indexOf()してループすることです。charAt()-

  1. でインデックスオフセットを開始します0
  2. 指定されたオフセットから-inの次の位置を取得します。string1
  3. string2見つかった位置に文字が含まれているかどうかを確認します。含まれている場合は、それがであるかどうかを確認し-ます。でない場合-、チェックは失敗しています。
  4. インデックスオフセットを次の入力に設定し、-string12を繰り返します。
  5. ですべて-の'が見つかったら、文字列内の含まれているポイントよりも遠いポイントにが含まれているstring1かどうかを確認します。含まれている場合、チェックは失敗しています。そうでない場合は、チェックに合格しています。string2-string1

概念実証のサンプル:

int index = string1.indexOf("-", 0);
while (index > 0) {
    // if string2 doesn't contain a dash at the current position, return false
    if ((string2.length() <= index) || (string2.charAt(index) != "-")) return false;
    index = string1.indexOf("-", (index + 1));
}
// do one last final check to see if string2 contains a dash that's further than string1's last dash
return !(string2.indexOf("-", string1.lastIndexOf("-") + 1) > 0);
于 2012-08-20T19:05:38.970 に答える
0

この問題のアルゴリズムを配置します。

  • Strings1 と s2 のどちらが最も短いかを確認します。ショートストリングを ss としましょう。
  • ss ではString#indexOf、ダッシュの次の位置 (または必要な w/e char) を取得するために使用します。
  • String位置を使用して、ダッシュ (または探している文字) がある場合は、他の位置を確認します。String#charAtこの目的のためにメソッドを使用できます。
  • 文字が一致する場合は、インデックス -1 を取得するまでループを続けます (これは、文字が ss に存在しないことを意味します)。
  • 他の文字列に最後の有効なインデックスの文字が含まれているかどうかを確認してください。それ以上ない場合は、両方の文字列に同じ量のダッシュがあります。そうでなければいいえ。

このソリューションでは、追加の配列を使用して位置を確認する必要はありません。

于 2012-08-20T19:36:02.000 に答える