1

以前 Id は、if ステートメント、部分文字列などをサポートするフォーマット マスクをユーザーが入力できるようにすることについてこの質問をしました。

JavaScript で Script Engine を使用するための答えは機能しましたが、JavaScript 構文はユーザーにとって非常に簡単ではありません

(albumartist.length>0  ? albumartist +'-' :(artist.length>0 ? artist + '-' : ' ')) + (album.length>0 ? album + '-' :'') + (trackno.length>0 ? trackno + '-' :'')  + title

出力を与えることができます

U2-Boy-Twilight-02

しかし、より簡単な構文は次のようになります

if(%albumartist%,%artist%)-if(%album%,%album%-)if(%trackno%,%trackno-)%title

主な違いは、明示的に文字列を '+' で連結したり、文字列リテラルを ' ' で引用したりする必要がないことです。

これは、http://wiki.hydrogenaudio.org/index.php?title=Foobar2000:Title_Formatting_Reference#.24if2.28a.2Celse.29 で詳述されている Foobar タイトル フォーマット リファレンスに似ていますが、これを物理的に実装することはできませんでした。 Java で解析します。

何か案は ?

4

1 に答える 1

1
  • AFAIK、標準JDKではjavascript(ECMAScript)のみがサポートされています。以下のコードで、使用可能なエンジンを確認できます。
  • スクリプトプロジェクトでは他のエンジンも利用できますが、あなたが言及している言語がそれらの一部であるとは思いません。
  • 気になる場合(そして時間に余裕がある場合)は、独自のスクリプトエンジンを作成できます

あなたはあちこちでエンジンについてもっと読むことができます。

最後に、JavaでFooBar2000構文を「単純に」解析できます。

要約すると、あなたがやろうとしていることは簡単な作業のようには聞こえません-頑張ってください!;-)

public static void main(String[] args) {
    ScriptEngineManager mgr = new ScriptEngineManager();
    List<ScriptEngineFactory> factories =
            mgr.getEngineFactories();
    for (ScriptEngineFactory factory : factories) {
        String engName = factory.getEngineName();
        String engVersion = factory.getEngineVersion();
        String langName = factory.getLanguageName();
        String langVersion = factory.getLanguageVersion();
        System.out.printf("Script Engine: %s (%s)\n", engName, engVersion);
        System.out.printf("\tLanguage: %s (%s)\n", langName, langVersion);
    }
}
于 2012-07-04T10:36:35.857 に答える