1

我有一个需要修改的字符串数组列表。当我将它们添加到列表中时,它们看起来像这样。

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”。

有人可以看到我在这里做错了什么吗?

4

4 回答 4

2

您需要转义., \., 因为正则表达式中的句点表示匹配任何字符。在发布的正则表达式的情况下,"CAST.ST"将匹配"AST"".ST".

改变:

tick.add(ticks.get(i).replaceAll(".ST", ".xml")); 

到:

tick.add(ticks.get(i).replaceAll("\\.ST", ".xml")); 
于 2012-09-06T08:19:56.080 回答
0

问题是 。表示正则表达式中的任何字符。用“\.ST”转义点。

于 2012-09-06T08:21:09.543 回答
0

replaceAll()接受 RegEx 表达式作为第一个参数。

为什么不直接使用replace(".ST", ".xml") ,因为您只想从原始值中替换一个值。

此答案无需使用正则表达式

于 2012-09-06T08:23:44.580 回答
0

由于您需要替换最后一次出现以替换文件扩展名,您可以使用

ticks.get(i).replaceAll("\\.st$", ".xml")
于 2012-09-06T08:45:53.047 回答