2

文字列を別の文字列と一致させて、2 つの文字間で少なくとも 3 文字が一致するようにしようとしています。私の文字列は、正確な長さ 4、すべて大文字、3 文字、および 0 から 10 までの 1 桁 (0 と 10 を除く) である必要があります。例: RM5Z 最も単純な形式で Java でそれを行うにはどうすればよいですか?

4

2 に答える 2

4

文字列の形式を確認するには、この^(?=[A-Z]*[1-9][A-Z]*$).{4}$正規表現を使用できます

  • ^.{4}$長さ4を確保します
  • ^(?=[A-Z]*[1-9][A-Z]*$)文字 A ~ Z で囲むことができる範囲 1 ~ 9 の数字を含む文字列のみを受け入れます

これがあなたの文字列をチェックしたい方法かどうかわからない、私に知らせてください

static boolean testStrings(String a, String b) {

    if (isValid(a) && isValid(b)) {
        for (int i = 0; i < 4; i++) {
            a = a.replaceFirst(String.valueOf(b.charAt(i)), "");
        }
        return a.length() <= (4 - 3);
    }else
        return false;

}

static boolean isValid(String s) {
    return s.matches("^(?=[A-Z]*[1-9][A-Z]*$).{4}$");
}
于 2013-02-15T16:31:04.243 に答える
2

長さ 4 の 2 つの文字列に共通の 3 文字があるかどうかを知りたい場合、およびすべての文字が制限された範囲内にあることがわかっている場合は、ビットセットを交差させてビットを数えることができます。

public static boolean haveNCharsInCommon(String a, String b, int n) {
  BitSet charsInA = charsIn(a);
  BitSet charsInB = charsIn(b);
  charsInA.and(charsInB);
  return charsInA.cardinality() >= n;
}

private BitSet charsIn(String s) {
  BitSet bs = new BitSet();
  for (int i = 0, n = s.length(); i < n; ++i) {
    bs.set(s.charAt(i);
  }
  return bs;
}

文字列に任意のコードポイントが含まれる可能性がある場合は、ビットセットの代わりにスパース ベクトルを使用することをお勧めします。

于 2013-02-15T16:36:24.650 に答える