[英]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.