簡體   English   中英

如何-遍歷字符串並標識特定字符並添加到字符串

[英]How to - Loop through a String and identify a specific character and add to the string

我目前正在嘗試遍歷String並標識該字符串中的特定字符,然后在最初標識的字符之后添加特定字符。

例如,使用字符串:aaaabbbcbbcbb和我想識別的字符為: c

因此,每次檢測到ac時,都會將以下c添加到字符串中,並且循環將繼續。

因此aaaabbbcbbcbb將成為aaaabbbccbbccbb

我一直在嘗試使用indexOf()substringcharAt()但是我現在要么用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.

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