当前位置: 首页 > 知识库问答 >
问题:

Java replaceAll/replace字符串,带有美元符号[duplicate]的实例

林威
2023-03-14
public static String template = "$A$B"

public static void somemethod() {
         template.replaceAll(Matcher.quoteReplacement("$")+"A", "A");
         template.replaceAll(Matcher.quoteReplacement("$")+"B", "B");
             //throws java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 3
         template.replaceAll("\\$A", "A");
         template.replaceAll("\\$B", "B");
             //the same behavior

         template.replace("$A", "A");
         template.replace("$B", "B");
             //template is still "$A$B"

}

我不明白。我使用了在互联网上找到的所有替换方法,包括我能找到的所有堆栈溢出。我甚至试过\u0024!发生了什么?

共有2个答案

巩子实
2023-03-14

字符串是不可变的。因此,您需要将replaceAll的返回值分配给一个新字符串:

String s = template.replaceAll("\\$A", "A");
System.out.println(s);
马冯浩
2023-03-14

替换不是就地完成的(Java中不能修改String,它们是不可变的),而是保存在方法返回的新String中。您需要保存返回的字符串引用,以便进行任何操作,例如:

template = template.replace("$B", "B");
 类似资料:
  • 我正在尝试从Java文本文件中读取一行。我得到一个异常。 这是文本文件中的行: 我需要用“#”拆分,这部分起作用了。当我试图访问位置1处的元素时,Java抛出异常。我想这是因为名字和姓氏之间有空格,因为当我显示的是“Chiquita”,而不是“Chiquita Sanford”。 当第一个数组索引中有多个单词时,Java对拆分是否有一些限制。

  • 问题内容: 我有这个: JSONLint表示这是完全有效的json。但是执行时出现错误。 但是,如果我将代码更改为: (请注意双反斜杠) 它可以工作,但是现在JSONLint表示。 有人可以帮助您了解这种行为吗? 问题答案: 有线格式和您必须在代码中编写的格式之间是有区别的。当您在代码中声明此代码时,您需要在文字中使用双-\,以便字符串获得一个反斜杠(否则,它将\\解释为一个转义序列,仅声明一个“

  • 如果字符串包含“FC”、“AFC”或“London”,我将尝试删除这些字符串。我试过: 字符串可以是例如“阿森纳伦敦足球俱乐部”。 但不起作用:(

  • 问题内容: 我正在尝试像在此网页中那样使用printf语句在Java中进行格式化:单击此处。但是我只是不知道$符号的目的是什么。有人可以向我解释一下吗? 输入: 预期的输出:(应该有一个空格而不是_) 我的代码: 问题答案: 这是 参数索引 。您可以阅读文档。我将尝试为您解释教程中的字符串: 通常,格式为。 在我们的示例中,指向语句中的位置。我们有3个字符串格式化,因此为什么我们的格式化字符串有,

  • 我试图使用ikvmc从Scala代码编译的jar文件生成的DLL(是的,我的日子过得很好)。Scala编译器似乎为操作符重载生成包含美元符号的标识符,而IKVM使用生成的DLL中的标识符(我可以在Reflector中看到)。问题是,美元符号在C#代码中是非法的,所以我不能引用那些方法。 有办法解决这个问题吗?

  • 问题内容: 我想分割一个具有如下内容的字符串: 但是当我使用时: 它不能识别$并且不分割字符串,但是当我用$像X这样的字母替换$时,它可以工作。有人有什么主意吗? 问题答案: split函数需要一个正则表达式(而不是字符串)进行匹配。您的正则表达式使用特殊字符-在本例中为’$’-因此您需要对其进行更改以转义该字符: 还要注意,split返回一个字符串数组- 字符串是不可变的,因此无法修改。对Str