修改单词的最后几个字母?

时间:2017-09-14 16:08:31

标签: c# string input char

我需要编写一个程序,由于立陶宛语的一些奇怪的语法规则,它会改变输入单词的最后两个(或最后一个)字母。

例如,我的名字是Kazys。 我想要一个可以将最后两个字母(ys)改为另一个字母(y)的代码。 所以当一个人输入时

Kazys

输出为

您好,Kazy。

如果某人输入Balys,代码应将名称更改为Baly并打印出来。

我只是C#的初学者。所以,我甚至不知道一些基本功能。 非常感谢任何帮助!!

P.S。对于那些想知道的人,为什么我需要这个,我可以告诉你,立陶宛语语中的一个问题是,如果你正在向某人说话,那就要改变这个词的结尾。

4 个答案:

答案 0 :(得分:1)

我个人认为,像这样的语言规则就是存在正则表达式的原因。它允许您轻松制作具有前瞻,后视等规则,以确保只有在适合特定结构时才更改单词。对于您的示例案例,它应该像以下一样简单:

var firstName = "Kazys";
var formattedFirstName = Regex.Replace(firstName, @"ys$", "y");

字符串末尾的$意味着它只会改变" ys"到" y"什么时候" ys"是字符串中的最后两个字母。

正则表达式可能变得更加复杂,很多人不喜欢它们。但是,我发现大多数时候它们都很简洁明了。

答案 1 :(得分:0)

您可能会追求的最小工作样本。 您似乎对代码有复杂的要求,但这是替换字符串中字符串的基本概念。

using System;
using System.Drawing;
using System.Windows.Forms;

namespace ChangeLastChar_46223845
{
    public partial class Form1 : Form
    {
        TextBox txtbx_input = new TextBox();
        TextBox txtbx_result = new TextBox();
        Button btn = new Button();

        public Form1()
        {
            InitializeComponent();
            AddOurStuffToTheForm();

            PutDefaultWordInInputBox();
        }

        private void PutDefaultWordInInputBox()
        {
            txtbx_input.Text = "Krazys";
        }

        private void AddOurStuffToTheForm()
        {
            txtbx_input.Location = new Point(5, 5);
            btn.Location = new Point(5, txtbx_input.Location.Y + txtbx_input.Height + 5);
            txtbx_result.Location = new Point(5, btn.Location.Y + btn.Height + 5);

            btn.Text = "Substring";
            btn.Click += Btn_Click;

            this.Controls.Add(txtbx_input);
            this.Controls.Add(btn);
            this.Controls.Add(txtbx_result);

        }

        private void Btn_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(txtbx_input.Text) || string.IsNullOrWhiteSpace(txtbx_input.Text))
            {
                return;
            }
            if (txtbx_input.Text.EndsWith("ys"))
            {
                txtbx_result.Text = "Hello " + txtbx_input.Text.Substring(0, txtbx_input.Text.Length - 1);
            }
        }
    }
}

答案 2 :(得分:0)

您可以编写一个扩展类,它可以很容易地应用存储在字典中的规则。复杂的规则可以使Regex成为更好的选择,但是如果简单的字符串替换,不区分大小写的字典可能更好,以避免每次都检查每个可能的规则。

public static class LanguageExtensions
{

    // Define case insentive dictionary
    public static Dictionary<string, string> Rules = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase)
    {
        // List rules here
        { "ys", "y"},
    };

    public static string ApplyRules(this string input)
    {
        string suffix;
        if (input != null && input.Length > 2 && Rules.TryGetValue(input.Substring(input.Length - 2, 2), out suffix))
            return input.Remove(input.Length - 2) + suffix;
        else
            return input;
    }
}

然后,您只需要调用扩展方法:

Console.WriteLine("Kazys".ApplyRules()); // "Kazy"

答案 3 :(得分:-1)

public static class NameEditor
{
     public static string EditName(string name) 
    {
          return name.Remove(name.Length-1);
     } 
}

这将删除名称的最后一个字符。我希望你能从这里概括一下你的具体规则。

使用:

string name="Kazys";
Console.WriteLine(NameEditor.EditName(name));