3

ドキュメントとさまざまなチュートリアルをオンラインで読みましたが、Java で正規表現がどのように機能するかについてまだ混乱しています。私がやろうとしているのは、文字列型の引数を受け取る関数を作成することです。次に、渡された文字列に MDCLXVIivxlcdm 以外の文字が含まれているかどうかを確認します。たとえば、文字列 "XMLVID​​" は false を返し、"ABXMLVA" は true を返す必要があります。

public boolean checkString(String arg)
{
     Pattern p = Pattern.complile("[a-zA-z]&&[^MDCLXVIivxlcdm]");
     Matcher m = p.matcher(arg);
     if(m.matches())
          return true;
     else
          return false;
 }

「XMLIVD」、「ABXMLVA」、「XMLABCIX」を渡すと、すべて false が返されます。私は何を間違っていますか?どんな助けでも大歓迎です。

4

3 に答える 3

6

文字クラス内でJavaの文字クラス交差演算子を使用する必要があります。使用しない場合、文字通りに一致し&&ます。Aところで、 to(小文字)からの最初の文字クラスには、がz含まれ[\]^_ていますが、これは絶対に必要ありません。「Patter.complile」のつづりを間違えました。

また、matches()

領域全体をパターンと照合しようとします。

したがって、find()代わりに使用するか、式に。を埋め込む必要があります.*

public boolean checkString(String arg) {
    return Pattern.compile("[[a-zA-Z]&&[^MDCLXVIivxlcdm]]").matcher(arg).find();
}
于 2013-02-13T20:41:05.847 に答える
1

このような関数を 2 つの引数で使用できます。つまり、

  • origingalStringチェックする元の文字列
  • searchString検索する文字列

コードを正確に

public boolean checkCompletelyExist(String origingalString,String searchString){ 
  boolean found = false; 
  String regex = ""; 
  try{ 
    for(int i = 0; i < searchString.length();i++){ 
      String temp = String.valueOf(searchString.charAt(i)); 
      regex = "[\\x20-\\x7E]*"+"["+temp.toLowerCase()+"|"+temp.toUpperCase()+"]+[\\x20-\\x7E]*"; 
      if(!origingalString.matches(regex)){ 
        found = true; 
        break; 
      } 
    } 
    System.out.println("other character present : "+found); 
  } catch (Exception e) { 
    e.printStackTrace(); 
  } 
  return found; 
}

例えば:

checkCompletelyExist("MDCLXVIivxlcdm","XMLVID")出力はother character present : false

checkCompletelyExist("MDCLXVIivxlcdm","ABXMLVA")出力はother character present : true

于 2013-02-13T21:12:01.917 に答える