在java中加倍字符串的字母

时间:2015-09-19 23:49:11

标签: java eclipse string loops for-loop

我被要求编写一个传递了String的方法,然后返回一个String,每个字符加倍。我在之前提出的问题上找到了代码,但我想知道为什么s.charAt(i)必须加两次。

我使用的代码是:

MySQL

2 个答案:

答案 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。如果对许多字符串进行大量修改,这可能会成为问题,从而导致大量内存使用。永远记住这一点,特别是当你有更改字符串的循环时。

现在回到问题所在。给定Strings,您希望“加倍”每个字符。由于您必须检查s的每个字符,因此您可能需要循环。

你还需要什么?好吧,你需要某种结构来构建新的String。您可以选择StringBuilderchar[]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);