使用groovy正则表达式将'%@'替换为'%n $ s'

时间:2015-06-05 07:31:18

标签: android regex groovy

我有一个像some text %@ some text %@ some text这样的字符串 其中%@是obj-c格式。我需要将此字符串转换为some text %1$s some text %2$s some text,这是一个带有格式的android资源。

我怎么能用groovy正则表达式来做呢?

2 个答案:

答案 0 :(得分:2)

你可以这样做:

def s = 'some text %@ some text %@ some text'

def newS = 1.with { idx -> s.replaceAll(/%@/, { v -> "%${idx++}\$s" }) }

给出了输出:

'some text %1$s some text %2$s some text'

答案 1 :(得分:1)

你有一个字符串some text %@ some text %@ some text

您可以使用stringtokenizer来划分该字符串:

例如:

String myString= "Hello world"

//we can divide my string using space as reference on this way.
StringTokenizer tokens = new StringTokenizer(myString, " ");
                        //here hello
                        String SplitFirst = tokens.nextToken();
                        //here world
                        String SplitSecond = tokens.nextToken();

第二个例子:

String myString= "Hello:world:everybody"

//we can divide my string using `:` as reference on this way.
StringTokenizer tokens = new StringTokenizer(myString, ":");
                        //here hello
                        String SplitFirst = tokens.nextToken();
                        //here world
                        String SplitSecond = tokens.nextToken();
                        //here everybody
                        String SplitThird = tokens.nextToken();

然后在您的问题上,您可以执行相同的过程,但使用作为参考%@

如果您有不同的字符串,可以使用replace更改%@

例如

String newString = string.replace("%@", "%1$s");

以后你可以连接新字符串:

同样, 例如

String NewConcatenateString= SplitFirst + SplitSecond + SplitThird......