문자열에서 [토큰]와 문자열의 모든 발생 회수를 찾아 int 배열에 배치

주앙 고메스 :

내가 문자열 [] 내에서 하나의 문자열을 교체하는 작업 코드가 있습니다. 이 문자열에서 "[1]"근무 :

private string returnWithLinks(string adminString, int adminId)
    {
        var returnString = "Nothing at all";

        int pFrom = adminString.IndexOf("[") + "[".Length;
        int pTo = adminString.LastIndexOf("]");

        var getSourceId = adminString.Substring(pFrom, pTo - pFrom);

        int i = 0;
        bool tryParse = int.TryParse(getSourceId, out i);
        if(!tryParse) {returnString = "this is not an int!";} else {
            if(i == 1) {
                returnString = adminString.Replace("[1]", "<a>something</a>" + var1fromsomwhere + i);
            } else if (i == 2) {
                returnString = adminString.Replace("[2]", "<a>other something</a>" + var2fromsomwhere + i);
            } else if (i == 3) {
                returnString = adminString.Replace("[3]", "<a>other something</a>" + var3fromsomwhere + i);
            } else if (i == 4) {
                returnString = adminString.Replace("[4]", "<a>other something</a>" + var4fromsomwhere + i);
            } else if (i == 5) {
                returnString = adminString.Replace("[5]", "<a>other something</a>" + var5fromsomwhere + i);
            }
        }
        return returnString;
    }

그러나 지금과 같은 모든 토큰 발행 수를 대체 할 수 있어야합니다 :

adminString = "[1][2]somthingelse[2]another[4]aa";

나는 그 경우 조항 각 INT 루핑, int 배열에 토큰 내부의 모든의 int 배치에 대해 생각했지만, 배열을 생성하는 것은 completly 밖으로 내 leage의입니다.

이걸 어떻게 달성 할 수 있습니까?

절은 IF와 통해 어레이 I 의지 루프를 갖는 후.

조나단 알파 :

당신은 배열 또는 루프가 필요하지 않습니다.

사전을 사용하여 예를 들어이 작업을 수행하는 방법에는 여러 가지가 ...있다.

그러나 귀하의 경우 복잡한 것들에 대한 필요가 없습니다.

단 한 줄의 코드는 다음과 같이 모든 것을 대체합니다 :

    private string returnWithLinks(string adminString, int adminId)
    {
            var returnString = adminString
               .Replace("[1]", "<a>something</a>" + var1fromsomwhere + 1)
               .Replace("[2]", "<a>something</a>" + var2fromsomwhere + 2)
               .Replace("[3]", "<a>something</a>" + var3fromsomwhere + 3)
               .Replace("[4]", "<a>something</a>" + var4fromsomwhere + 4)
               .Replace("[5]", "<a>something</a>" + var5fromsomwhere + 5);

            return returnString;
    }

사전 및 루프 활용하기 :

    private static readonly Dictionary<string, string> _replacements = new 
    Dictionary<string, string>
    {
        { "[1]", "<a>something</a>" + var1fromsomwhere + 1 },
        { "[2]", "<a>something</a>" + var2fromsomwhere + 2 },
        { "[3]", "<a>something</a>" + var3fromsomwhere + 3 },
        { "[4]", "<a>something</a>" + var4fromsomwhere + 4 },
        { "[5]", "<a>something</a>" + var5fromsomwhere + 5 },            
    };
    private string returnWithLinks(string adminString, int adminId)
    {
            var keys = _replacements.Keys.ToArray();
            var returnString = adminString;

            for(var i = 0; i < keys.Length; i++)
            {
                var key = keys[0];

                returnString = returnString.Replace(key, _replacements[key]);
            }

            return returnString;
    }

당신은 사전 청소기를 보이지만, 코드 라인의 유지 보수 및 수의 측면에서 똑같은 일이 볼 수 있듯이.

당신은 여전히 ​​모든 교체를 위해 사전에 한 줄을 추가해야합니다.

사전이 하드 코딩되어 있지 않으면 내가 사전에 루프에서 그것을 할 것입니다 유일한 이유가 될 것이다.

사전은 예를 들어 데이터베이스의 값으로 채워졌다 경우 의미.

루프의 또 다른 단점은 문자열 할당의 양을 반복 당 하나 개의 추가 할당입니다.

추천

출처http://10.200.1.11:23101/article/api/json?id=406306&siteId=1