JAVA中string.replace和string.replaceAll的区别及用法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA中string.replace和string.replaceAll的区别及用法相关的知识,希望对你有一定的参考价值。

1、替换方式不同

【public String replace( )】

是通过用 newChar 替换此字符串中出现的所有 oldChar 而生成的。

【public String replaceAll( )】

使用给定的 replacement 字符串替换此字符串匹配给定的正则表达式的每个子字符串。

2、参数不同

【replace】的参数是char和CharSequence。可以支持字符的替换,也支持字符串的替换。

【replaceAll】的参数是regex,regex表示是正则表达式。即基于正则表达式的替换。

用法范例一:

public static void main(String[] arg) throws OgnlException

String s =”sdf\\\\a\\\\aa”;

//把s中的反斜杠\\ 替换为\\\\

System.out.println(s);

System.out.println(s.replaceAll(“\\\\\\\\”, “\\\\\\\\\\\\\\\\”));

System.out.println(s.replace(“\\\\”, “\\\\\\\\”));

用法范例二:

String str = "wel2come3Souhe";

String str1 = str.replace("e", "E");

String str3 = str.replace('e', 'E');

System.out.println("replace字符串==" + str1);

System.out.println("replace字符=="+str3);

String str2 = str.replaceAll("\\\\d", "a");//将数字替换a

System.out.println("replaceAll==" + str2);

输出结果:

replace字符串==wEl2comE3SouhE

replace字符==wEl2comE3SouhE

replaceAll==welacomeaSouhe

扩展资料

Java中的String类

1、String类是final类,因此String类不能被继承。

2、String的成员方法都默认为final方法。

3、被final修饰的类是不允许被继承的,并且该类中的成员方法都默认为final方法。

4、String类其实是通过char数组来保存字符串的。

5、String对象一旦被创建就是固定不变的。

6、对String对象的任何改变都不影响到原对象,相关的任何change操作都会生成新的对象。

参考资料:百度百科-Java

参考资料:百度百科-string

参考技术A

replace是单纯的替换字符串,而replaceAll是替换匹配的正则表达式。

以下为JDK API的doc说明:

    replace(CharSequence target, CharSequence replacement) 使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串。

    replaceAll(String regex, String replacement) 使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。

参考技术B replace和replaceAll是JAVA中常用的替换字符的方法,它们的区别是:
  1)replace的参数是char和CharSequence,即可以支持字符的替换,也支持字符串的替换(CharSequence即字符串序列的意思,说白了也就是字符串);
  2)replaceAll的参数是regex,即基于规则表达式的替换,比如,可以通过replaceAll("\\d", "*")把一个字符串所有的数字字符都换成星号;
  相同点是都是全部替换,即把源字符串中的某一字符或字符串全部换成指定的字符或字符串,如果只想替换第一次出现的,可以使用 replaceFirst(),这个方法也是基于规则表达式的替换,但与replaceAll()不同的是,只替换第一次出现的字符串;
  另外,如果replaceAll()和replaceFirst()所用的参数据不是基于规则表达式的,则与replace()替换字符串的效果是一样的,即这两者也支持字符串的操作;
  还有一点注意:执行了替换操作后,源字符串的内容是没有发生改变的.
  举例如下:
  String src = new String("ab43a2c43d");
  System.out.println(src.replace("3","f"));=>ab4f2c4fd.
  System.out.println(src.replace('3','f'));=>ab4f2c4fd.
  System.out.println(src.replaceAll("\\d","f"));=>abffafcffd.
  System.out.println(src.replaceAll("a","f"));=>fb43fc23d.
  System.out.println(src.replaceFirst("\\d,"f"));=>abf32c43d
  System.out.println(src.replaceFirst("4","h"));=>abh32c43d.
  如何将字符串中的"\"替换成"\\":
  String msgIn;
  String msgOut;
  msgOut=msgIn.replaceAll("\\\\","\\\\\\\\");
  原因:
  '\'在java中是一个转义字符,所以需要用两个代表一个。例如System.out.println( "\\" ) ;只打印出一个"\"。但是'\'也是正则表达式中的转义字符(replaceAll 的参数就是正则表达式),需要用两个代表一个。所以:\\\\被java转换成\\,\\又被正则表达式转换成\。
  同样
  CODE: \\\\\\\\
  Java: \\\\
  Regex: \\
  将字符串中的'/'替换成'\'的几种方式:
  msgOut= msgIn.replaceAll("/", "\\\\");
  msgOut= msgIn.replace("/", "\\");
  msgOut= msgIn.replace('/', '\\');本回答被提问者采纳

string.contains和string.replace在一行代码中

我正在编写一些软件,我必须从外部文件加载很多列名。通常我会用一些JSON来做这件事,但出于用户友好的原因,我现在不能这样做。我需要使用一个对用户可读的文本文件,并包含很多注释。

所以我创建了自己的文件来保存所有这些值。

现在,当我在我的软件中导入这些值时,我基本上逐行遍历我的配置文件,如果它匹配我随后解析的参数,我会检查每一行。但是这样我最终得到了一个带有非常重复代码的大代码块,我想知道是不能以某种方式简化它,以便每一次检查都只需要一行。

这是我目前使用的代码:

if (line.Contains("[myValue]"))
{
   myParameter = line.Replace("[myValue]", string.Empty).Trim();                        
}

我知道使用Linq你可以简单地将它们放在一行中,我只是不确定它是否适用于这种情况?

谢谢你的帮助!肯尼斯

答案

如果这段代码经常重复,为什么不创建一个方法:

void SetParameter(string line, string name, ref string parameter)
{
    if (line.Contains(name))
    {
       parameter = line.Replace(name, string.Empty).Trim();                        
    }
}
SetParameter(line, "[myValue]", ref myParameter);

如果你想避免同时调用ReplaceContains,这可能是一个好主意,你也可以调用Replace

void SetParameter(string line, string name, ref string parameter)
{
    var replaced = line.Replace(name, string.Empty);
    if (line != replaced)
    {
       parameter = replaced.Trim();                        
    }
}
另一答案

试试这种方式(三元):

myParameter = line.Contains("[myValue]")?line.Replace("[myValue]", string.Empty).Trim():myParameter;

其实,

line.IndexOf应该更快。

从你的代码看,你看起来只是用空文本替换,所以为什么不采取整个字符串(由许多行组成)并一次替换,而不是一次检查一行。

另一答案

您可以使用RegEx。这可能会减轻一些重复的代码

        string line = "[myvalue1] some string [someotherstring] [myvalue2]";
        // All your Keys stored at a single place
        string[] keylist = new string[] {  @"[myvalue1]", @"[myvalue2]" };

        var newString = Regex.Replace(line, string.Join("|", keylist), string.Empty);

希望能帮助到你。

以上是关于JAVA中string.replace和string.replaceAll的区别及用法的主要内容,如果未能解决你的问题,请参考以下文章

JAVA中string.replace()和string.replaceAll()的区别及用法

String replace() 和 replaceAll() 的区别

Java:String.replace(regex, string) 从 XML 中删除内容

String replace() 在 Java 中返回额外的空间

如何使用string.replace替换

java.lang.String.replace 问题的提示? [复制]