我正在用正则表达式和在字符串开头剪切男性编码字符。我遇到了不同的实现:
String Str = new String(".,,¨B<?xml version='1.0' encoding='UTF-8'?>
str.replaceFirst("(.*)<?xml","<?xml");
str.trim().replaceFirst("(.*)<?xml","<?xml")
输出保持不变。这有什么区别,应该使用哪一个?
答案 0 :(得分:2)
String.trim()方法从字符串中删除尾随和前导空格。但由于您正在测试的字符串没有任何尾随或前导空格,因此下面两个肯定会返回相同的字符串。
str.replaceFirst("(.*)<?xml","<?xml");
str.trim().replaceFirst("(.*)<?xml","<?xml")
但是,正则表达式仅删除前导空格,因此如果测试字符串具有尾随空格,则结果将不同。例如:
String str = new String(" .,,¨B<?xml version='1.0' encoding='UTF-8'?> ");
String str1 = str.replaceFirst("(.*)<?xml", "<?xml");
String str2 = str.trim().replaceFirst("(.*)<?xml", "<?xml");
System.out.println(str1 + "|");
System.out.println(str2 + "|");
给你,注意第一个结果仍然有尾随空格。
<?xml version='1.0' encoding='UTF-8'?> |
<?xml version='1.0' encoding='UTF-8'?>|
答案 1 :(得分:1)
trim()
方法删除前导空格和尾随空格。在您的情况下,区别在于它删除尾随空格,因为替换正则表达式将匹配<?xml
之前的任何字符(包括空格)。
顺便说一下,您应该将正则表达式更改为".*?<\\?xml"
,原因如下:
?
,否则它具有使<
可选的特殊含义。所以你的正则表达式将匹配“hello xml abc”,返回“&lt;?xml abc”。不是你想要的。.*
更改为.*?
来完成。尝试使用“abc&lt;?xml def&lt;?xml ghi”的输入str,你会看到差异。答案 2 :(得分:0)
没有区别...... trim()
会返回String
,然后您按顺序调用replaceFirst()
;它就像直接打电话给String.replaceFirst()
一样。
至于方法&#39;函数trim()
将删除(修剪)String
边缘(开头和结尾)的不必要的空格字符。
答案 3 :(得分:0)
首先,您必须了解两种方法:
trim()
- &gt;返回此字符串的副本,其中删除了前导和尾随空格,如果没有前导或尾随空格,则返回此字符串。replaceFirst(String regex,String replacement)
- &gt;将给定替换的给定正则表达式匹配的此字符串的第一个子字符串替换。
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("===========replaceFirst=============");
String test1 = "I am a teacher in a secondary school";
String out1 = test1.replaceFirst("a", "an");
System.out.println(out1);
System.out.println("===========trim.replaceFirst=============");
String test2 = "I am a teacher in a secondary school";
String out2 = test2.trim().replaceFirst("a", "an");
System.out.println(out2);
}
输出控制台:
=========== replaceFirst =============
我是一名中学老师 =========== trim.replaceFirst =============
我是一名中学老师
因此,replaceFirst()
和trim().replaceFirst()
之间没有区别。