1

以前我问过这个问题Putting a simple expression language into java关于允许用户输入支持 if 语句、子字符串等的格式化掩码。

使用 Script Engine 和 javascript 的答案有效,但是 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 回答