用于循环和字符串

本文关键字:字符串 循环 用于 | 更新日期: 2023-09-27 18:30:15

所以我有一个字符串,在其中,我想用一个点替换最后 3 个字符。我
做了一些事情,但我的结果不是我想要的。
这是我的代码:

string word = "To je";
        for (int k = word.Length; k > (word.Length) - 3; k--)
        {
            string newWord = word.Replace(word[k - 1], '.');
            Console.WriteLine(newWord);
        }


我得到的输出是:
到j。
至 .e
To.je

但我想要的输出是:
到...

我怎么去那里?
所以该程序正在做一些类似于我实际希望它做的事情,但不完全是。
我真的一直在为此苦苦挣扎,任何帮助将不胜感激。

用于循环和字符串

看看这个:

string newWord = word.Replace(word[k - 1], '.');

你总是在替换word中的一个角色......但是word本身不会改变,因此在下一次迭代中,替换已经"消失"。

您可以使用:

word = word.Replace(word[k - 1], '.');

(然后将输出移动到末尾,只需写出word

但是,请注意,这会将最后三个字符中的任何一个替换为 .

解决所有这些问题的最简单方法是使用Substring当然,但是如果您真的想循环,则可以使用StringBuilder

StringBuilder builder = new StringBuilder(word);
for (int k = word.Length; k > (word.Length) - 3; k--)
{
    builder[k - 1] = '.';
}
word = builder.ToString();
  1. 您将用句点替换这三个最后位置中每个位置的角色的所有实例。 您只想替换末尾的那一个字符。 "aaaaa"不应该变成"....."而是"啊..."。
  2. 您在计算中间值后打印出newWord,然后从不对其进行任何操作,word保持不变。 您需要在正确调整相关字符后将其重新分配给word

当然,更简单的解决方案(对你和计算机来说)是简单地连接你拥有的字符串的一个子字符串,该子字符串排除了带有三个句点的最后三个字符。

假设字符串始终至少为 3 个字符,则可以对除最后三个字符以外的所有内容进行子字符串,然后将三个点(句点)附加到该字符串的末尾。

string word    = "To je";
string newWord = word.Substring(0, word.Length - 3); // Grabs everything but the last three chars
newWord       += "..."; // Appends three dots at the end of the new string
Console.WriteLine(newWord);

注意:这假设输入字符串单词至少为三个字符。如果要提供较短的字符串,则需要对字符串的长度进行额外检查。

如果之后
不需要原词使用乔恩双向飞碟方法

string word = "To je";
word = word.Substring(0,word.Length - 3);
word += "...";
Console.WriteLine(word);

正如@jon-skeet所说,你可以用子字符串来做到这一点。 以下是使用子字符串执行此操作的 3 种方法。

你可以使用 String.Concat

string word = "To je";
word = String.Concat(word.Substring(0,word.Length-3),"...");
Console.WriteLine(word);

您可以使用 + 运算符

string word2 = "To je";
word2 = word2.Substring(0,word.Length-3) + "...";
Console.WriteLine(word2);

您可以使用 String.Format

string word3 = "To je";
word3 = String.Format("{0}...",word3.Substring(0,word.Length-3));
Console.WriteLine(word3);

我参加聚会有点晚了,但到目前为止发布的所有其他解决方案都没有优雅地处理字符串短于请求的替换次数或任意数量的替换的情况。下面是一个通用函数,用于将字符串末尾的最后 n 个字符替换为用户指定的值:

static String replace_last_n(String s, int nchars, char replacement='.')
{
    nchars = Math.Min(s.Length, nchars > 0 ? nchars : 0);
    return s.Substring(0, s.Length - nchars) + new String(replacement, nchars);
}
Console.WriteLine(replace_last_n("wow wow wow", 3));
Console.WriteLine(replace_last_n("wow", 3, 'x'));
Console.WriteLine(replace_last_n("", 3));
Console.WriteLine(replace_last_n("w", 3));
Console.WriteLine(replace_last_n("wow", 0));
Console.WriteLine(replace_last_n("wow", -2));
Console.WriteLine(replace_last_n("wow", 33, '-'));

输出:

wow wow ...
xxx
.
wow
wow
---
if (word.Length > 3)
    Console.WriteLine(word.substring(0, word.Length - 3) + "...");

或类似的东西,不需要循环!