user3135211
user3135211

Reputation: 55

String Utilities in C#

I'm learning about string utilities in C#, and I have a method that replaces parts of a string.

Using the replace method I need to get an output such as

"Old file name: file00"

"New file name: file01"

Depending on what the user wants to change it to.

I am looking for help on making the method (NextImageName) replace only the digits, but not the file name.

class BuildingBlock
{
    public static string ReplaceOnce(string word, string characters, int position)
    {
        word = word.Remove(position, characters.Length);
        word = word.Insert(position, characters);
        return word;
    }

    public static string GetLastName(string name)
    {
        string result = "";
        int posn = name.LastIndexOf(' ');
        if (posn >= 0) result = name.Substring(posn + 1);
        return result;
    }

    public static string NextImageName(string filename, int newNumber)
    {
        if (newNumber > 9)
        {
            return ReplaceOnce(filename, newNumber, (filename.Length - 2))
        }
        if (newNumber < 10)
        {

        }
        if (newNumber == 0)
        {

        }
    }

The other "if" statements are empty for now until I find out how to do the first one.

Upvotes: 0

Views: 3016

Answers (3)

ScottK
ScottK

Reputation: 277

public static string NextImageName(string filename, int newNumber)
{
    int i = 0;
    foreach (char c in filename)  // get index of first number
    {
        if (char.IsNumber(c))
            break;
        else
            i++;
    }

    string s = filename.Substring(0,i);  // remove original number
    s = s + newNumber.ToString();        // add new number

    return s;

}

Upvotes: 0

seddik
seddik

Reputation: 646

public static string NextImageName(string filename, int newNumber)
{
    string oldnumber = "";
    foreach (var item in filename.ToCharArray().Reverse())
        if (char.IsDigit(item))
            oldnumber = item + oldnumber ;
        else
            break;

    return filename.Replace(oldnumber ,newNumber.ToString());
}

Upvotes: 0

poy
poy

Reputation: 10507

The correct way to do this would be to use Regular Expressions.

Ideally you would separate "file" from "00" in "file00". Then take "00", convert it to an Int32 (using Int32.Parse()) and then rebuild your string with String.Format().

Upvotes: 1

Related Questions