![](/img/trans.png)
[英]Is there a way I can find out if a string in C# does not contain the numbers & characters 0-9 and A-Z?
[英]Increment a string from numbers 0-9 to lowercase a-z to uppercase A-Z in C#
我希望能夠有一個以 '000000' 開頭的 6 個字符長的字符串。 然后我想在我點擊 9 時將它增加 1 '000001' 我想在到達 z 時轉到 '00000a' 我想轉到 '00000A'。 當到達“Z”時,我想將第一個重置為 0,然后從下一個位置“000010”開始,依此類推。 '000011','000012'...'0000a0','0000a1'...'0000A0','0000A1'
我將如何在 C# 中做到這一點?
先感謝您。 麥克風
這使用IntToString
支持來自問題Quickest way to convert a base 10 number to any base in .NET? ,但硬編碼以使用您的格式(base 62)。
private static readonly char[] baseChars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray();
private const long targetBase = 62;
private const long maxNum = 62L*62*62*62*62*62 - 1;
public static string NumberToString(long value)
{
if (value > maxNum)
throw new ArgumentException();
char[] result = "000000".ToCharArray();
int i = result.Length - 1;
do
{
result[i--] = baseChars[value % targetBase];
value /= targetBase;
}
while (value > 0);
return new string(result);
}
這是另一種方法……它允許您傳入“起始修訂”(在示例中為“000000”)。 很久以前,我最初在 VB.Net 中編寫了它,以回答一個具有非常具體要求的問題......所以下面的可能不是最有效的做事方式。
public partial class Form1 : Form
{
private Revision rev;
public Form1()
{
InitializeComponent();
Reset();
}
private void Reset()
{
rev = new Revision("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", "000000");
label1.Text = rev.CurrentRevision;
}
private void btnReset_Click(object sender, EventArgs e)
{
Reset();
}
private void btnNext_Click(object sender, EventArgs e)
{
rev.NextRevision();
if (rev.CurrentRevision.Length == 7)
{
MessageBox.Show("Sequence Complete");
Reset();
}
else
{
label1.Text = rev.CurrentRevision;
}
}
}
public class Revision
{
private string chars;
private char[] values;
private System.Text.StringBuilder curRevision;
public Revision()
{
this.DefaultRevision();
}
public Revision(string validChars)
{
if (validChars.Length > 0)
{
chars = validChars;
values = validChars.ToCharArray();
curRevision = new System.Text.StringBuilder(values[0]);
}
else
{
this.DefaultRevision();
}
}
public Revision(string validChars, string startingRevision)
: this(validChars)
{
curRevision = new System.Text.StringBuilder(startingRevision);
int i = 0;
for (i = 0; i <= curRevision.Length - 1; i++)
{
if (Array.IndexOf(values, curRevision[i]) == -1)
{
curRevision = new System.Text.StringBuilder(values[0]);
break;
}
}
}
private void DefaultRevision()
{
chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
values = chars.ToCharArray();
curRevision = new System.Text.StringBuilder(values[0]);
}
public string ValidChars
{
get { return chars; }
}
public string CurrentRevision
{
get { return curRevision.ToString(); }
}
public string NextRevision(int numRevisions = 1)
{
bool forward = (numRevisions > 0);
numRevisions = Math.Abs(numRevisions);
int i = 0;
for (i = 1; i <= numRevisions; i++)
{
if (forward)
{
this.Increment();
}
else
{
this.Decrement();
}
}
return this.CurrentRevision;
}
private void Increment()
{
char curChar = curRevision[curRevision.Length - 1];
int index = Array.IndexOf(values, curChar);
if (index < (chars.Length - 1))
{
index = index + 1;
curRevision[curRevision.Length - 1] = values[index];
}
else
{
curRevision[curRevision.Length - 1] = values[0];
int i = 0;
int startPosition = curRevision.Length - 2;
for (i = startPosition; i >= 0; i += -1)
{
curChar = curRevision[i];
index = Array.IndexOf(values, curChar);
if (index < (values.Length - 1))
{
index = index + 1;
curRevision[i] = values[index];
return;
}
else
{
curRevision[i] = values[0];
}
}
curRevision.Insert(0, values[0]);
}
}
private void Decrement()
{
char curChar = curRevision[curRevision.Length - 1];
int index = Array.IndexOf(values, curChar);
if (index > 0)
{
index = index - 1;
curRevision[curRevision.Length - 1] = values[index];
}
else
{
curRevision[curRevision.Length - 1] = values[values.Length - 1];
int i = 0;
int startPosition = curRevision.Length - 2;
for (i = startPosition; i >= 0; i += -1)
{
curChar = curRevision[i];
index = Array.IndexOf(values, curChar);
if (index > 0)
{
index = index - 1;
curRevision[i] = values[index];
return;
}
else
{
curRevision[i] = values[values.Length - 1];
}
}
curRevision.Remove(0, 1);
if (curRevision.Length == 0)
{
curRevision.Insert(0, values[0]);
}
}
}
}
基於字符串的方法,類似於 Tim S 的回答:
private static string Increment(string input)
{
var myChars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray();
var array = input.ToCharArray();
for (int i = array.Count()-1; i >= 0; i--)
{
int newValue = (Array.IndexOf(myChars, array[i]) + 1) % 62;
array[i] = myChars[newValue];
if (newValue != 0)
break;
}
return new string(array);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.