我有一个需要修改的字符串ArrayList。当我将它们添加到列表中时,它们看起来像这样。
tick.add("CAST.ST");
tick.add("ELUX-B.ST");
tick.add("EKTA-B.ST");
然后我有一个方法来修改名称以删除“.ST”并添加“.XML”
private static void addFileNames(List<String> ticks, List<File> fileNames)
{
List<String> tick = new ArrayList<String>();
for(int i=0; i<ticks.size(); i++)
{
tick.add(ticks.get(i).replaceAll(".ST", ".xml"));
}
for(int i=0; i<tick.size(); i++)
{
File f = new File("XML/" + tick.get(i));
fileNames.add(f);
}
这适用于所有字符串,除了“CAST.ST”,它被修改为“C.xml.xml”。 我也尝试了replaceFirst,然后将子串“AST”替换为“C.xml.ST”。
有人能看到我在这里做错了吗?
答案 0 :(得分:2)
您需要转义.
,\.
,因为正则表达式中的句点意味着匹配任何字符。在"CAST.ST"
的情况下,发布的正则表达式将匹配"AST"
和".ST"
。
变化:
tick.add(ticks.get(i).replaceAll(".ST", ".xml"));
为:
tick.add(ticks.get(i).replaceAll("\\.ST", ".xml"));
答案 1 :(得分:0)
问题是。代表正则表达式中的任何字符。用“\ .ST”转义点。
答案 2 :(得分:0)
答案 3 :(得分:0)
由于您需要替换最后一次出现以替换文件扩展名,您可以使用
ticks.get(i).replaceAll("\\.st$", ".xml")