繁体   English   中英

在java中将字符串的双字母加倍

[英]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 您可以选择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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM