11

一部の文字列が有効な (完全修飾された) Java クラス名を表していることを確認する良い方法はありますか? たとえば、org.comPAny.ClassNameまたはmYcRAZYcLASSnAME有効なクラス名でもありますが、そうでないかのようなものorg..package.MyClassですorg.ClassName.。そのクラスをロードせずにクラス名の有効性を確認したい。

Javaでそれを確認する便利な方法はありますか? または、すべてのケースをカバーする正規表現を提供できますか?

編集: サードパーティのライブラリを提案しないでください。

4

7 に答える 7

10

防弾ソリューションが本当に必要な場合は、文字列を分割して"\\."最初に使用します

Character.isJavaIdentifierStart

そしてループ内

Character.isJavaIdentifierPart

パーツが有効な識別子名であることを確認します。

 

編集: #split(String)文字列を正規表現として解釈するため、最小の驚きの原則によって期待するの"\\."ではなく、文字列を分割するようにしてください。"."なんて悪い API 設計でしょう。それはあなたの言語に正規表現リテラルがないことから得られるものです…</p>

于 2012-11-26T00:45:05.350 に答える
3
public static boolean isValidJavaIdentifier(String s)
{
 // an empty or null string cannot be a valid identifier
 if (s == null || s.length() == 0)
 {
    return false;
 }

 char[] c = s.toCharArray();
 if (!Character.isJavaIdentifierStart(c[0]))
 {
    return false;
 }

 for (int i = 1; i < c.length; i++)
 {
    if (!Character.isJavaIdentifierPart(c[i]))
    {
       return false;
    }
 }

 return true;
}

参照: http ://www.java2s.com/Code/Java/Reflection/CheckwetherthegivenStringisavalididentifieraccordingtotheJavaLanguagespecifications.htm

于 2012-11-26T00:48:51.587 に答える
1

これを見たことがありますか ?

http://commons.apache.org/sandbox/classscan/apidocs/org/apache/commons/classscan/builtin/ClassNameHelper.html

メソッドisValidIdentifier*指定された名前が有効な Java パッケージ名部分またはクラス識別子であるかどうかを確認します。

于 2012-11-26T06:49:19.237 に答える