我被要求编写一个传递了String的方法,然后返回一个String,每个字符加倍。我在之前提出的问题上找到了代码,但我想知道为什么s.charAt(i)必须加两次。
我使用的代码是:
MySQL
答案 0 :(得分:1)
如果您遵循程序逻辑,您将看到发生以下情况:
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时,都会创建一个新字符串,从而浪费宝贵的资源)。
答案 1 :(得分:0)
这里有如何思考这个以及要记住什么。
首先,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);