簡體   English   中英

Java - 生成長度為 x 的字符串

[英]Java - Generating strings of length x

我的 Java 程序中有一些“繁重”的字符串操作,通常涉及遍歷字符串並用填充字符(通常是“@”)替換某些段。 這些字符后來被刪除但被使用,以便在迭代期間 String 的長度和當前索引保持不變。

此過程通常涉及一次替換 1 個以上的字符。
例如
我可能需要在字符串"I love cats"中用"@@@"替換"cat" ,給出"I love @@@s" ,所以我經常需要創建長度為x的 "@" 字符串。

在 python 中,這很容易。

NewString = "@" *x

在 Java 中,我發現我目前的方法令人反感。

String NewString = "";
for (int i=0; i< x; i++)  {  
    NewString = NewString.concat("@");  }

是否有適當的、預先確定的方法來執行此操作?
有人有更短、更“打高爾夫球”的方法嗎?
謝謝!


眼鏡:
Java SE (Jre7)
Windows 7 (32)

我不清楚評論建議使用哪種正則表達式,但是創建一個用特定字符填充到給定長度的字符串非常容易:

public static String createString(char character, int length) {
    char[] chars = new char[length];
    Arrays.fill(chars, character);
    return new String(chars);
}

Guava 有一個不錯的小方法Strings.repeat(String, int) 查看該方法的來源,它基本上是這樣的:

StringBuilder builder = new StringBuilder(string.length() * count);
for (int i = 0; i < count; i++) {
  builder.append(string);
}
return builder.toString();

您構建長度為 N 的字符串的方法非常低效。 您應該使用StringBuffer及其方便的append方法,或者構建N個字符的數組,並使用String的相應構造函數。

您能否始終在“填充”字符串中使用相同的字符並且您知道x的最大值嗎? 你可以預先創建一個常量,它可以被切割成任意長度:

private static final FILLER = "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@";

// inside your method
String newString = FILLER.substring(0, x);

java.lang.String是不可變的。 因此,連接字符串會導致創建臨時字符串對象,因此速度很慢。 您應該考慮使用可變緩沖區,如StringBufferStringBuilder 在 java 中使用字符串時的另一個最佳實踐是盡可能使用CharSequence類型。 這將避免對toString()的不必要調用,並且您可以輕松更改底層實現類型。

如果您正在尋找一個單一的襯里來重復字符串並且這證明使用外部庫是合理的,請查看 Apache Commons 庫中的StringUtils.repeat 但是,我覺得你可以只編寫自己的代碼,而不是使用另一個庫來完成重復字符串的瑣碎任務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM