文字列の配列があります:
string[] remove = { "a", "am", "p", "pm" };
そして、ユーザーがテキストを入力するテキストボックスがあります。テキストボックスのテキストの最後にあるremove
配列に文字列を入力した場合、削除する必要があります。これを行う最も簡単な方法は何ですか?
[〜#〜] edit [〜#〜]明確にするために、タイムパーサーを作成しています。関数に文字列を指定するとき、次の形式に解析するのが最善です:08:14pm
私はそれをテストするためのテキストボックスを持っています。フォーカスがテキストボックスを離れるとき、数字のみのセグメントを解析できるように、接尾辞am/pm/a/pなしでテキストを取得する必要があります。
string[] remove = { "a", "am", "p", "pm" };
string inputText = "blalahpm";
foreach (string item in remove)
if (inputText.EndsWith(item))
{
inputText = inputText.Substring(0, inputText.LastIndexOf(item));
break; //only allow one match at most
}
foreach (string suffix in remove)
{
if (yourString.EndsWith(suffix))
{
yourString = yourString.Remove(yourString.Length - suffix.Length);
break;
}
}
BrokenGlassのソリューションは良いものだと思いますが、個人的には、ユーザーが開始、終了、または両方のみをトリムできる3つの個別のメソッドを作成することを好みます。
これらのわずらわしさを頻繁に使用する場合は、ヘルパークラスで作成するか、拡張メソッドとして作成します。 http://msdn.Microsoft.com/en-gb/library/vstudio/bb383977.aspx
public string TrimStart(string inputText, string value, StringComparison comparisonType = StringComparison.CurrentCultureIgnoreCase)
{
if (!string.IsNullOrEmpty(value))
{
while (!string.IsNullOrEmpty(inputText) && inputText.StartsWith(value, comparisonType))
{
inputText = inputText.Substring(value.Length - 1);
}
}
return inputText;
}
public string TrimEnd(string inputText, string value, StringComparison comparisonType = StringComparison.CurrentCultureIgnoreCase)
{
if (!string.IsNullOrEmpty(value))
{
while (!string.IsNullOrEmpty(inputText) && inputText.EndsWith(value, comparisonType))
{
inputText = inputText.Substring(0, (inputText.Length - value.Length));
}
}
return inputText;
}
public string Trim(string inputText, string value, StringComparison comparisonType = StringComparison.CurrentCultureIgnoreCase)
{
return TrimStart(TrimEnd(inputText, value, comparisonType), value, comparisonType);
}
これらのメソッドを使用して、トリミングする文字列を含む配列をループするためのコードを変更できます。
var content = "08:00 AM";
var removeList = new [] { "a", "am", "p", "pm" };
for (var i = 0; i < removeList.length; i++)
{
content = TrimEnd(content, removeList[i]);
}
注:このコードはさらに最適化できますが、そのままの状態で適切な速度で機能します。
編集に基づいて、組み込みの DateTime.TryParse または DateTime.Parse メソッドの後にString.Formatを使用することを検討してください。 文字列のフォーマットに関する優れたリソース へのリンクもあります。
おそらく、DateTime
をプライマリタイプとして使用できます。
つかいます DateTime.TryParse
ユーザーが入力した時間を読み取ります。そして、DateTime.ToString
必要な形式を使用して時間を再フォーマットします。
正規表現に適した場所のようです。
using System.Text.RegularExpressions;
public bool IsValidTime(string thetime)
{
Regex checktime = new Regex(@"^(20|21|22|23|[01]\d|\d)(([:][0-5]\d){1,2})$");
return checktime.IsMatch(thetime);
}
Xx:xxの形式の時間が必要だと仮定します
var output = (from x in remove
where input.EndsWith(x)
select input.Substring(0, input.Length - x.Length)).FirstOrDefault() ?? input;
char[] remove = { 'a', 'p', 'm' };
string s = "8:14pm";
s = s.TrimEnd(remove);