Java - 替换字符串:charAt VS substring

时间:2014-09-03 08:09:44

标签: java

我正在做一个简单的测试,只是从字符串中删除一个字符。它是这样的:

String str = "kitten";
    int i = 2;
    //substring version - works good 
    System.out.println(str.replaceFirst(str.substring(i, i+1), ""));
    //charAt (tried as regex):
    System.out.println(str.replaceFirst("[str.charAt(i)]", ""));
    //charAt (tried as char):
    System.out.println(str.replaceFirst("str.charAt(i)", ""));

子串版本运行良好,charAt仅在i = 1时才有效。这有什么不对?

4 个答案:

答案 0 :(得分:3)

在您的第二个和第三个代码段中,您不是替换charAt()调用的结果,而是替换"charAt(i)"字符串。看,它在引号中。此外,charAt()会返回char,因此您必须在使用前将其转换为String

试试这个:

System.out.println(str.replaceFirst("[" + String.valueOf(str.charAt(i)) + "]", ""));
System.out.println(str.replaceFirst(String.valueOf(str.charAt(i)), ""));

答案 1 :(得分:0)

System.out.println(str.replaceFirst(“str.charAt(i)”,“”));

不符合您的想法。它不是在i寻找角色。它正在寻找匹配正则表达式模式“str.charAt(i)”的第一个实例。您的其他“replaceFirst”实施也存在类似的问题。

这意味着“strAchar(i)”匹配“str.charAt(i)”但是当我恰好等于2时,“i”与“str.charAt(i)”不匹配。双引号之间的东西不会被解释为Java代码。

答案 2 :(得分:0)

System.out.println(str.replaceFirst("str.charAt(i)", ""));

此行将在字符串str中将字符串“str,charAt(i)”替换为“”(如果它出现)。 您需要详细了解replace()charAt() here

答案 3 :(得分:0)

使用第一个例子,你说"效果很好",我期待这个输出:

  

kiten

     

ktten

     

小猫

str.substring(i+1)返回' (i + 1或" 3rd"字符)。然后,您将其传递到str.replaceFirst,用""替换' 第一次出现,有效地删除它

你在第二个中做的是奇怪的:你正在用正则表达式调用replaceFirst" [str.charAt(i)]"这基本上意味着"替换方括号中任何一个字符的第一个(除了我认为的圆括号"所以你也可以说"匹配任何字符a,A,c ,h,i,r,s,t"(我按字母顺序排列,删除重复项和'(',')'和'。') ,以及第一个匹配"小猫"以及恰好是' i'以便删除charachter。

最后一个例子是在字符串" str.charAt(i)"上寻找完全匹配。当然,在小猫"中无处可寻。你也可以寻找" dog"。

以下代码与您刚刚完成的内容相同:

String str = "kitten";
int i = 2;
// Eliminated redundant regex replacement:
System.out.println(new StringBuffer(str.substring(0, i)).append(str.substring(i+1)));
// Search for any of the characters in "str.substring(i)"
System.out.println(str.replaceFirst("[aAchirst]", ""));
// Search for non-matching string
System.out.println(str.replaceFirst("dog", ""));