[英]How to - Loop through a String and identify a specific character and add to the string
我目前正在嘗試遍歷String
並標識該字符串中的特定字符,然后在最初標識的字符之后添加特定字符。
例如,使用字符串:aaaabbbcbbcbb和我想識別的字符為: c
因此,每次檢測到ac時,都會將以下c添加到字符串中,並且循環將繼續。
因此aaaabbbcbbcbb將成為aaaabbbccbbccbb 。
我一直在嘗試使用indexOf()
, substring
和charAt()
但是我現在要么用ac覆蓋其他字符,要么僅檢測一個c。
我知道您已請求循環,但是替換就不會那么簡單嗎?
String inputString = "aaaabbbcbbcbb";
String charToDouble = "c";
String result = inputString.replace(charToDouble, charToDouble+charToDouble);
// or `charToDouble+charToDouble` could be `charToDouble.repeat(2)` in JDK 11+
但是,如果您堅持使用循環:
String inputString = "aaaabbbcbbcbb";
char charToDouble = 'c';
String result = "";
for(char c : inputString.toCharArray()){
result += c;
if(c == charToDouble){
result += c;
}
}
遍歷所有字符。 將每個添加到StringBuilder
。 如果它與您要查找的字符匹配,請再次添加。
final String test = "aaaabbbcbbcbb";
final char searchChar = 'c';
final StringBuilder builder = new StringBuilder();
for (final char c : test.toCharArray())
{
builder.append(c);
if (c == searchChar)
{
builder.append(c);
}
}
System.out.println(builder.toString());
輸出量
aaaabbbccbbccbb
您可能正在嘗試在Java中修改String。 Java中的字符串是immutable
,不能像c++
那樣進行更改。
您可以使用StringBuilder插入字符。 例如:
StringBuilder builder = new StringBuilder("acb");
builder.insert(1, 'c');
先前的建議String.replace
答案是最好的解決方案,但是如果您需要以其他方式(例如,練習)進行操作,那么這里是一個“現代”解決方案:
public static void main(String[] args) {
final String inputString = "aaaabbbcbbcbb";
final int charToDouble = 'c'; // A Unicode codepoint
final String result = inputString.codePoints()
.flatMap(c -> c == charToDouble ? IntStream.of(c, c) : IntStream.of(c))
.collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)
.toString();
assert result.equals("aaaabbbccbbccbb");
}
這將依次檢查每個字符(在IntStream中)。 如果與目標匹配,它將使字符加倍。 然后,它將每個字符累積在StringBuilder中。
可以進行微優化以預分配StringBuilder的容量。 我們知道新字符串的最大可能大小是舊字符串的兩倍,因此StringBuilder::new
可以由() -> new StringBuilder(inputString.length()*2)
代替。 但是,我不確定是否值得犧牲可讀性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.