C#从后到端读取字符串

时间:2017-03-30 15:58:16

标签: c# string split

我有一个字符串。例如:

string a = "abcdef098403248";

我的目标是,知道字符串以数字结尾(否则会发生这样的事情:MessageBox.Show("String doesnt end in a number");),我想读取字符串,从结尾开始到结束,并将值存储在另一个字串。 现在唯一的问题是,我只能存储在新的字符串数字中,当我读取string a时,如果我发现一个不是数字的字符,我会从后到后计数,我会停止阅读和存储在新字符串中找到的先前数字。代码输出应该看起来像这样:

string a = "aBcdef3213BBBBB0913456";
//part were i read the string from back to end
string finalString = "0913456";

如你所见,我从左到右存储数字,但我想从右到左阅读它们。

我想要的另一个例子:

string a = "aaaaa3a224444";
// part were i read the string from back to end
string finalString = "224444";

或者:

string a = "3333333a224444";
// part were i read the string from back to end
string finalString = "224444";

无论如何,谢谢。

5 个答案:

答案 0 :(得分:3)

Stack<char>是你的朋友:

var stack = new Stack<char>();

foreach (var c in a.Reverse())
{
    if (!char.IsDigit(c))
        break;

    stack.Push(c);
}

return new string(stack.ToArray());

答案 1 :(得分:0)

使用以下函数反转字符串。

以错误的方式抓住数字 - 将其旋转回来。

public static string Reverse( string s )
{
    char[] charArray = s.ToCharArray();
    Array.Reverse( charArray );
    return new string( charArray );
}

取自:Best way to reverse a string

答案 2 :(得分:0)

string str = "3333333a224444";
var reversedStr = str.Reverse();
string result= new String(reversedStr.TakeWhile(Char.IsDigit).ToArray());

答案 3 :(得分:0)

main = do
    {catch (take_number) fix_error;}
    where
        take_number = do
        {
            take_number "Give me a number";
            n <- readLn;
        }
        fix_error e = if Exception e then do
            {
                putStrLn "Invalid number! Try again";               
                main;
            }
            else ioError e

这个问题感觉很糟糕 - 但这是一种非常冗长的方式 解决你的问题。或者,您可以在c#中阅读正则表达式。

答案 4 :(得分:-1)

我想出了这个。不如别人优雅。它会将数字添加到字符串中,直到它再次遇到一个字母然后停止。

        string name;
        string[] Blacklist;
        Blacklist = new string[10];

        Blacklist[1] = "Example1";
        Blacklist[2] = "Example2";
        Blacklist[3] = "Example3";
        Blacklist[4] = "Example4";
        Blacklist[5] = "Example5";
        Blacklist[6] = "Example6";
        Blacklist[7] = "Example7";
        Blacklist[8] = "Example8";
        Blacklist[9] = "Example9";
        Blacklist[10] = "Example10";

        Console.WriteLine("Enter your name:");
        name = Console.ReadLine();
        if (name = Blacklist[]) 
                            ^^