0

オントロジーファイルから取得したJavaの文字列がいくつかあり、形式は次のとおりです。 <owl:onProperty rdf:resource="http://www.co-ode.org/ontologies/pizza/pizza.owl#WHAT_WE_WANT"/>

特定の文字列値が WHAT_WE_WANT に含まれているかどうかを検出し、文字列 WHAT_WE_WANT を返す関数を作成する必要があります。

そこで、ArrayList のすべての行を「#」で分割し、分割された行の 2 番目の部分で String 値を検索しました。あとは、"/>" を取り除くだけです。" 記号で分割しようとしましたが、""" と書いたときにコンパイラが " が必要な文字列記号であることを認識しないため、分割できません。 . 何か案は?

私の言葉の説明があまり良くなかった場合、ここに私のコードがあります:

   if (nextLine.matches(".*" + lookUp + ".*"  ))
    {String lala[]=nextLine.split("#");
    for(int i=0;i<lala.length;i++){
        if(lala[i].matches(".*"+lookUp+".*")){
            String[] temp=lala[i].split( """ ); //<--- doesn't work :/
            System.out.println(temp[0]);
            }
        }
    }
4

3 に答える 3

5

二重引用符をエスケープする必要があります。

String[] temp = lala[i].split("\"");

コードの残りの部分が実際に有効かどうかは確認していません。特に、パターンを使用しようとしている場合を除き、部分文字列を見つけるためだけに正規表現を使用することはありませんが、これで差し迫った問題は解決するはずです。

于 2012-11-30T12:38:16.610 に答える
4

これにより、コンパイル エラーが発生します。

String[] temp=lala[i].split( """ );

文字列リテラルの形式が正しくないためです。二重引用符がある場所で分割したい場合は、二重引用符をエスケープする必要があります。

String[] temp=lala[i].split( "\"" );

文字列リテラルでは、エスケープされていない二重引用符は「これが文字列の終わり」を意味します。そのため、コンパイラは、空の文字列 ( "") に続いて終了していない文字列リテラル ( を記述したと見なし" );ます。行末に到達すると、コンパイラは文字列が終了していないと不平を言います... Java 文字列リテラルはまたがることができないためです。複数行。


デコードしようとしているのは OWL です。つまり、OWL パーサー、RDF パーサー、または XML パーサーを使用して解析できます (おそらくそうするべきです)。正規表現などでバッシングするのではありません。

于 2012-11-30T12:39:29.297 に答える
2

書き留める必要がありますString[] temp=lala[i].split( "\"" );

バックスラッシュは、" または \ 自体として、文字列内の特殊文字のスニグニファイアです。

于 2012-11-30T12:40:08.577 に答える