java - ReplaceAll() 替换错误的子串

标签 java string replace

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

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

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

最佳答案

您需要转义 .\.,因为正则表达式中的句点意味着匹配任何字符。对于“CAST.ST”,发布的正则表达式将匹配“AST”“.ST”

更改:

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

至:

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

关于java - ReplaceAll() 替换错误的子串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12295779/

相关文章:

php - 将文本转换为图像 - PHP/GD - 保存图像

java - 检查两个字符串是否包含相同顺序的相同字符

python - 在字符串中查找数字并将其递减

Java : Set addAll() vs adding using loop

java - 如何在不运行App(main)的情况下初始化App的成员?

java - 如何使用java + selenium设置chrome浏览器语言?

c++ - BOOST_STATIC_ASSERT 没有 boost

java - 如何使用 Apache Tomcat 运行以文本文件编写的 JSP 文件?

c++ - 双空终止字符串

javascript - 如何使用 javascript 正则表达式替换字符串的一部分