1

1 つの項目が似ている文字列のリストがあります。ここでは、textItem1 = "Brown, Adam. (user)(admin)(Sales)"常に最後の括弧のペア (この場合はSales ) からテキストを抽出する必要があります。

私は次のことを試しました:

string name = DDlistName.SelectedItem.ToString();
int start = name.IndexOf("(");
int end = name.IndexOf("(");
string result = name.Substring(start + 1, end - start - 1);
_UILabelPrintName.Text = result;

問題: これは常に最初の括弧のペア (この場合はuser ) からテキストを選択します。

同様の質問の回答をたくさん読んで、この場合は正規表現が推奨されない可能性があることに気付きました(他のコードを試しても特に成功しませんでした)。ただし、タスクを実行できる短いルーチンのヘルプは本当に感謝しています。

4

2 に答える 2

2

LastIndexOfの代わりにを使用IndexOfし、最後に閉じ括弧があるかどうかを確認する必要があります。

string name = "Brown, Adam. (user)(admin)(Sales)";
int start = name.LastIndexOf("(");
int end = name.LastIndexOf(")");
string result = name.Substring(start + 1, end - start - 1);

本当に、検証して、両方の括弧が見つかったことを確認し startたいでしょう。文字が見つからない場合に返します。endLastIndexOf-1

また、入れ子を処理するために、開き括弧の位置の後に閉じ括弧を前方検索する必要があります。

 string name = "Brown, Adam. (user)(admin)((Sales))";
 int start = name.LastIndexOf('(');
 int end = (start >= 0) ? name.IndexOf(')', start) : -1;
 string result = (end >= 0) ? name.Substring(start + 1, end - start - 1) : "";
于 2013-10-17T13:06:57.390 に答える
1

開き括弧で文字列を分割して、分割機能を使用できます。最後の配列要素は、末尾に ")" が付いた目的の出力であり、その後削除されます。

var input = "Brown, Adam. (user)(admin)(Sales)";
// var input = DDlistName.SelectedItem.ToString();

var lastPick = input.Split(new[] { "(" }, StringSplitOptions.RemoveEmptyEntries).Last(); 
var output = lastPick.Substring(0, lastPick.Length - 1);

_UILabelPrintName.Text = output;

もう 1 つの方法は、while ループを で使用することIndexOfです。別の「(」が見つかる限り、入力文字列を切り取ります。それ以上の「(」が見つからない場合は、残りの文字列の内容を閉じ括弧「)」まで取得します。

int current = -1;
while(name.IndexOf("(") > 0)
{
    name = name.Substring(name.IndexOf("(") + 1);
}

var end = name.IndexOf(")");
var output = name.Substring(0, end);

_UILabelPrintName.Text = output;

または使用LastIndexOf....

于 2013-10-17T13:06:37.940 に答える