2011-06-21 99 views
0

我有这样的字符串:操纵以下字符串的最佳方法是什么?

"{0}_something_{1}-{2}-something" 

,我需要这些字符串转换为

"%s_something_%s-%s-something" 

什么是做到这一点的最好方法是什么?

+0

有什么逻辑吗?何时添加下划线? – Fortega

+0

下划线没有逻辑。只用%s替换所有的{0},{1}。我忘了string.replce与正则表达式。我在这里得到了我的答案。谢谢 – AAaa

+1

然后将你的例子替换为“我应该如何用'%s'替换所有'{0] ... {1} ...'等实例。 – mre

回答

4

我会使用正则表达式。

String data = "{0}something{1}-{2}-something"; 
System.out.println(data.replaceAll("\\{.*?\\}", "%s_")); 

输出:

%s_something%s_-%s_-something

编辑: 一个RegExp,只有当有仅是数字{}之间

System.out.println(data.replaceAll("\\{\\d+\\}", "%s_")); 
+0

@dan:小心,这个解决方案会使'-'离开,另外,它不会只匹配大括号之间的数字,但是任何字符。看看我的答案是一个完整的测试解决方案。 – Shef

+0

@Shef。dan发布的示例在输出中仍然有'-',这就是为什么我没有试图删除它。然而,发布新的正则表达式只有当数字之间有'{}' – Kaj

+0

时,才会匹配是的,那只会匹配数字,好吧,如果他还想要'-',那就是他想要的;)好的工作 – Shef

6
myString.replaceAll("\\{\\d\\}", "%s") 

如果你想取代创造Ë一个Java格式字符串,那么你应该可能保留这些替代品的顺序,否则像foo {2} bar {1} baz {0}字符串将带来问题:

myString.replaceAll("\\{(\\d)\\}", "%$1$$s"); 
+0

这个正则表达式并不代替什么他想替换 – Kaj

+0

咦?他说他想要这个输出'%s_something_%s-%s-something'我的正则表达式正在产生这个输出。 – Kaj

+0

谢谢。但在“{”之前需要“\\”。否则你会得到PatternSyntaxException:非法重复。 – AAaa

1
String result = MessageFormat.format("{0}something{1}-{2}-something", "%s_", "_%s", "%s"); 
1
String str  = "{0}something{1}-{2}-something"; 
String clean = str.replaceAll("(\\{\\d+\\}-?)", "%s_"); 
System.out.println(clean); // outputs: %s_something%s_%s_something 
相关问题