上記の2つの文字列に対して真です。マッチ文字列パターン
答えて
文字列のいずれかに*
が含まれている場合は、正規表現を使用できます。ただ、[PF]
ですべての*
を置き換える:
String s = "PPFFP";
if (s.matches("P[PF][PF]F[PF]") {
...
}
両方の文字列で*
を許可する複数の基本メソッドは次のようになります。
public static boolean matches(String s1, String s2) {
if (s1.length() != s2.length()) return false;
for (int i = 0; i < s1.length(); i++) {
if (s1.charAt(i) != '*' &&
s2.charAt(i) != '*' &&
s1.charAt(i) != s2.charAt(i)) {
return false;
}
}
return true;
}
また、[FP] + "' –
@MichaelMarkidis:そうは思わないでしょう。 1つの文字列内の位置にワイルドカードがない場合、その文字列のうちのどれが他の文字列にあるかは重要です。 –
Gotcha。私はOPが最初に望んでいたことを完全に理解していませんでした。ありがとう。 –
の質問は少しあいまいです。しかし、あなたはright
は、任意の文字に一致するように*
をも含むことができながらleft
は、唯一のPとFが含まれている方法
public boolean matches(String left, String right)
を作成する必要がありますと仮定しましょう。あなたは*
がPまたはFのいずれかに一致するように[PF]
によって置き換えられる正規表現の中に右引数を変換することによってこれを行うことができます
:Javaでは
public boolean matches(String left, String right) {
String regex = right.replace("*", "[PF]");
return left.matches(regex);
}
、正規表現は単なるString
値であり、それは完全に許容可能です正規表現が他の式で作成された文字列であるためです。
left
とright
の両方に*
が含まれる場合は、Frankの答えをご覧ください。 (注:これはあなたの状況と思われますが、私はあなたのコメントを見る前に私の答えを掲載しました))正規表現を作成することによってこれを行う "巧妙な"方法がありますが、ループアプローチ。しかし、これはうまくいくと思う:
public boolean matches(String left, String right) {
String regex = right.replace("*", "#")
.replace("P", "[P\\*]")
.replace("F", "[F\\*]")
.replace("#", "[PF\\*]");
return left.matches(regex);
}
私はこれをテストしていない。
私が理解するものから、これはあなたが探しているものかもしれません:
あなたは文字クラスを正規表現を使用することができますString input_1 = "*PF*P";
String input_2 = "P**F*";
char[] input_1_chars = input_1.toCharArray();
char[] input_2_chars = input_2.toCharArray();
if(input_1.length() != input_2.length()){ // If two strings are not equal
System.out.println("FALSE");
}
else{
for(int i=0;i<input_2.length();i++){
if(input_2.charAt(i) == '*'){
input_1_chars[i]='*'; // Copy asterisk from input 2 to indices of input 1.
}
}
for(int i=0;i<input_1.length();i++){
if(input_1.charAt(i) == '*'){
input_2_chars[i]='*'; // Copy asterisk from input 1 to indices of input 2.
}
}
input_1 = String.valueOf(input_1_chars);// Convert char array back to string.
input_2 = String.valueOf(input_2_chars);
if(input_1.equals(input_2)){
System.out.println("TRUE");// If strings are equal then print True
}
else{
System.out.println("FALSE");//else false
}
}
INPUT: OUTPUT: PPF*P TRUE P**F*
INPUT: OUTPUT: PPFPP FALSE P**F*
このように見えますが、長さが等しくないと分かった場合は、本当に終了する必要があります。あなたがそれを書いたやり方では、それはFALSEを出力し、次に続行しようとし、最終的に例外をスローします。また、OPが両方の文字列に '*'を含むことができるようになったので、両方の文字列がchar配列に変換され、両方の配列の文字が必要に応じて '*'に設定されるように修正する必要があると思います。 Frankのソリューションはより効率的だと思いますが、これは同様の問題を解決するのに役立つ方法です。また、「アスタリスク」のスペルミスもあります。 – ajb
さて、私がOPから理解したのは、2番目の文字列にアスタリスクしか含まれていないことです。とにかく新しいコードが更新されます。それを指摘していただきありがとうございます。 –
- 1. 文字列パターン
- 2. 文字列をいくつかのパターンにマッチさせる最速の方法
- 3. RegExp - パターンにマッチしない文字列を何も置き換えません。
- 4. マッチUnicode文字
- 5. マッチ文字が
- 6. マッチ文字が
- 7. スカラ文字列パターンのベストプラクティス
- 8. 文字列パターン検索アルゴリズムスタックオーバーフロー
- 9. 作る文字列パターン
- 10. Swagger - Base64文字列のパターン
- 11. パターンx:文字列のxs
- 12. Luaのパターン - 文字列
- 13. 文字列リテラルのパターン
- 14. 文字列のパターン変更
- 15. マッチ文字、私は次のように持つことができ、文字列内のパターン
- 16. 正規表現マッチ、この文字列
- 17. PHPマッチ文字列を正確に
- 18. SQL Serverのマッチ異なる文字列
- 19. URLリライト - マッチ固有の文字列
- 20. マッチ複数行の文字列
- 21. マッチしたURLパターン
- 22. 部分文字列のパターンによる文字列の解析
- 23. Python:文字列内の文字列パターンを削除する
- 24. PHP Regexパターンが必要な文字列
- 25. joda-time DateTimeFormatterのパターン文字列?
- 26. パターン別のPython分割文字列
- 27. Javaの文字列ループのパターン
- 28. 文字列不明パターン一致
- 29. スカラ - 正規表現パターンは、文字列
- 30. 文字列比較とパターンの置換
。 –
問題について詳しく教えてください。あなたは "2つの文字列を比較する" - その2つの文字列はどこから来ますか?それらのうちの1つは既知の定数ですか、あるいはどちらも入力ソースから来る可能性がありますか?両方が入力から来る場合、それらのうちの1つだけに '*'、あるいはその両方が含まれていますか? – ajb
は入力から来て、両方とも '* 'を持つことができます –