簡體   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