如何在java中为所有特殊字符(',%,\,:,{,})转义所有特殊字符

问题描述:

有没有人有一个很好的方法从java中的字符串转义用在ffmpeg的drawtext过滤器链中?试图用不同的转义组合来使用replaceAll一直是一个挫折的练习!如何在java中为所有特殊字符(',%,,:,{,})转义所有特殊字符

String myTextString = "Bob's special\cool mix:stuff @ 40% off"; Runtime.getRuntime().exec(new String[] { "ffmpeg",...., "filter_complex", "drawtext=enable='between(t,0,10)':x=10:y=10:fontfile=Roboto-Black.ttf:text='" + myTextString + "':fontcolor=#a43ddb:fontsize=14", ... });

ffmpeg的DrawText的过滤器:https://ffmpeg.org/ffmpeg-filters.html#drawtext-1

+0

您是否尝试过任何正则表达式? –

+0

我试图用replaceAll函数替换反斜杠,然后尝试替换每个特殊字符。但是,在java,replaceAll,Strings,runtime exec,ffmpeg和drawtext之间的所有转义......我认为需要一些奇迹才能使它正确:-)希望有人已经找到了所需的咒语。 – ezwrighter

+0

看看https://*.com/questions/13696461/replace-special-character-with-an-escape-preceded-special-character-in-java –

好吧......敲我的头在墙上为获得正确的逃生方式,以满足Java和ffmpeg的后,我想出了这一点:

MyDrawTextString.replaceAll("\\\\", "\\\\\\\\\\\\\\\\").replaceAll("'", "'\\\\\\\\\\\\\''").replaceAll("%", "\\\\\\\\\\\\%").replaceAll(":", "\\\\\\\\\\\\:");

看起来很疯狂,但它的工作原理!注意:在我的答案中,我必须将我的反斜杠加倍,才能正确显示它:-P D那些反斜杠。

关键是ffmpeg drawtext需要3个反斜杠来转义(',%,:)和单引号也需要包裹在第二对单引号中。 Java字符串需要2个反斜杠才能创建一个,而java replaceAll正则表达式需要有2个反斜杠才能在字符串中创建一个反斜杠。因此,您需要(2 + 2)* 3反斜杠来转义drawtext过滤器字符串中的内容!

+0

我有类似的问题,除了它与双引号。你如何逃避?它是否与转义单引号相同? – NatashaC