コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【C#】文字列内の末尾の数値をインクリメントするサンプル

概要

using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;

public static class Program
{
    private static void Main()
    {
        var inputs = new List<string>();
        for ( int i = 0; i <= 100; i++ )
        {
            inputs.Add( "Item" + i.ToString( "00" ) );
        }

        var pattern = "([0-9]*$)";
        var regex   = new Regex( pattern );

        foreach ( var input in inputs )
        {
            var match       = regex.Match( input );
            var valueString = match.Value;

            if ( string.IsNullOrWhiteSpace( valueString ) ) continue;

            var value = int.Parse( valueString ) + 1;

            // 元の数値の桁数を超えないように Math.Min を使用
            // この処理を行わないと、例えば Item99 をインクリメントした時に
            // Ite100 になってしまう
            var digits = Math.Min( GetDigits( value ), valueString.Length );

            var result = 
                input.Remove( input.Length - digits, digits ) + value;

            Console.WriteLine( input + " -> " + result );
        }
    }

    private static int GetDigits( int num )
    {
        return num == 0 ? 1 : ( int ) Math.Log10( num ) + 1;
    }
}
Item00 -> Item01
Item01 -> Item02
Item02 -> Item03
Item03 -> Item04
Item04 -> Item05
Item05 -> Item06
Item06 -> Item07
Item07 -> Item08
Item08 -> Item09
Item09 -> Item10
Item10 -> Item11
Item11 -> Item12
Item12 -> Item13
Item13 -> Item14
Item14 -> Item15
Item15 -> Item16
Item16 -> Item17
Item17 -> Item18
Item18 -> Item19
Item19 -> Item20
Item20 -> Item21
Item21 -> Item22
Item22 -> Item23
Item23 -> Item24
Item24 -> Item25
Item25 -> Item26
Item26 -> Item27
Item27 -> Item28
Item28 -> Item29
Item29 -> Item30
Item30 -> Item31
Item31 -> Item32
Item32 -> Item33
Item33 -> Item34
Item34 -> Item35
Item35 -> Item36
Item36 -> Item37
Item37 -> Item38
Item38 -> Item39
Item39 -> Item40
Item40 -> Item41
Item41 -> Item42
Item42 -> Item43
Item43 -> Item44
Item44 -> Item45
Item45 -> Item46
Item46 -> Item47
Item47 -> Item48
Item48 -> Item49
Item49 -> Item50
Item50 -> Item51
Item51 -> Item52
Item52 -> Item53
Item53 -> Item54
Item54 -> Item55
Item55 -> Item56
Item56 -> Item57
Item57 -> Item58
Item58 -> Item59
Item59 -> Item60
Item60 -> Item61
Item61 -> Item62
Item62 -> Item63
Item63 -> Item64
Item64 -> Item65
Item65 -> Item66
Item66 -> Item67
Item67 -> Item68
Item68 -> Item69
Item69 -> Item70
Item70 -> Item71
Item71 -> Item72
Item72 -> Item73
Item73 -> Item74
Item74 -> Item75
Item75 -> Item76
Item76 -> Item77
Item77 -> Item78
Item78 -> Item79
Item79 -> Item80
Item80 -> Item81
Item81 -> Item82
Item82 -> Item83
Item83 -> Item84
Item84 -> Item85
Item85 -> Item86
Item86 -> Item87
Item87 -> Item88
Item88 -> Item89
Item89 -> Item90
Item90 -> Item91
Item91 -> Item92
Item92 -> Item93
Item93 -> Item94
Item94 -> Item95
Item95 -> Item96
Item96 -> Item97
Item97 -> Item98
Item98 -> Item99
Item99 -> Item100
Item100 -> Item101