[英]Doubling letters of a string in java
我被要求编写一个方法,该方法传递一个字符串,然后返回一个字符串,每个字符都加倍。 我在之前提出的问题中找到了代码,但我想知道为什么 s.charAt(i) 必须添加两次。
我使用的代码是:
public static String twoChars(String s){
String r= "";
for(int i=0; i<s.length(); i++)
r=r+s.charAt(i)+s.charAt(i);
return r;
}
如果按照程序逻辑,你会看到发生了以下情况:
1) pass a string (for example "hello")
2) start another empty string (String r = "")
3) when i==0, r becomes: ""+ h + h
4) when i==1, r becomes: hh + e + e
5) etc.
6) return "hheelloo"
注意:如前所述,使用 StringBuilder 是一个更好的解决方案,因为字符串是不可变的(每次 r 更改时,都会创建一个新字符串,从而浪费宝贵的资源)。
由于 r 为空,该方法在返回之前将每个字符添加到 r 两次。 更好的方法是为此使用 StringBuilder :
public static String twoChars(String s){
StringBuilder sb=new StringBuilder();
for(int i=0; i<s.length(); i++)
sb.append(s.charAt(i)+ "" +s.charAt(i));
return sb.toString();
}
好吧,这里是如何思考这个问题以及要记住什么。
首先,Java 中的String
是不可变的。 您对String
所做的所有修改都将导致创建一个新的String
。 如果对大量字符串进行大量修改,导致大量内存使用,这可能会出现问题。 永远记住这一点,特别是当你有改变字符串的循环时。
现在回到问题。 给定一个String
, s
,您希望将每个字符都“加倍”。 由于您必须检查s
每个字符,因此您可能需要一个循环。
你还需要什么? 好吧,您需要某种结构来构建新的String
。 您可以选择StringBuilder
或char[]
。 StringBuilder
就是这样做的:构建字符串。 但是,它以内存高效的方式构建。 实际上在内部它包含一个char[]
。
这是StringBuilder
解决方案:
String input = "hello";
StringBuilder builder = new StringBuilder(input.length() * 2);
for(int i = 0; i < input.length(); i++)
{
builder.append(input.charAt(i)).append(input.charAt(i));
}
String finalString = builder.toString();
这是一个char[]
解决方案
String input = "hello";
char[] tempChar = new char[input.length() * 2];
for(int i = 0; i < input.length(); i++)
{
tempChar[2 * i] = input.charAt(i);
tempChar[2 * i + 1] = input.charAt(i);
}
String output = new String(tempChar);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.