Java-删除选定字符串后首次出现的char

时间:2018-12-02 19:46:34

标签: java

在Java的String文本中,如何删除给定String之后的char的所有首次出现?例如:

String s = "Aaaaa bbb cc dd dddd cc ttt d";

删除整个字符串中“ cc”之后的第一个“ d”。

预期结果:

String s = "Aaaaa bbb cc d dddd cc ttt ";

3 个答案:

答案 0 :(得分:3)

看看Java String#replaceAll方法。它使您可以提供与要替换的术语匹配的正则表达式,然后提供替换字符串。

在这种情况下,您尝试匹配字符串d之后的cc,并将其删除(用空白字符串替换)。

正则表达式"(cc.*?)d"将与d之后的任何地方的第一个cc匹配,然后由于reluctant quantifier *?而不会匹配d的后续实例。

您可以使用capturing group(...))记下d之前的内容,然后在替换字符串中引用它。

因此解决方案变为string.replaceAll("(cc.*?)d", "$1"),其中$1是对组中捕获的文本的引用。

答案 1 :(得分:2)

如果您想不使用正则表达式而变得简单:

int ddIndex = s.indexOf("dd");
if (ddIndex != -1) {
 int cIndex = s.indexOf('c', ddIndex);
 if (cIndex != -1) {
   s = new StringBuilder(s).deleteCharAt(cIndex).toString();
 }
}

答案 2 :(得分:1)

var path = Path.Combine(TemporaryFontPath, customFont.FontFileName);
if (!Directory.Exists(Path.GetDirectoryName(path)))
    Directory.CreateDirectory(Path.GetDirectoryName(path));
if(!File.Exists(path))
    File.WriteAllBytes(path, customFont.FontBytes);

using (var pvc = new PrivateFontCollection())
{
    pvc.AddFontFile(path);
    return pvc.Families.FirstOrDefault();
}