2

文字「。」を削除しようとしています。最後のオカレンスを除く文字列から; たとえば、文字列

12.34.56.78

なったはず

123456.78

私はこのループを使用しています:

while (value != null && value.Count(c => c == '.') > 1)
 {
   value = value.Substring(0, value.IndexOf('.')) + value.Substring(value.IndexOf('.') + 1);
 }

明示的なループなしでこれを行うためのよりクリーンな方法(おそらくlinqを使用?)があるのだろうか?

(非常によく似た質問があることは知っていますが、それはperlに関するものであり、状況はまったく異なります)

4

6 に答える 6

5
int lastIndex = value.LastIndexOf('.');
if (lastIndex > 0)
{
    value = value.Substring(0, lastIndex).Replace(".", "")
        + value.Substring(lastIndex);
}
于 2012-12-12T16:21:42.770 に答える
3

おそらくstringメソッドとLinqの混合:

string str = "12.34.56.78";
Char replaceChar = '.';
int lastIndex = str.LastIndexOf(replaceChar);
if (lastIndex != -1)
{
    IEnumerable<Char> chars = str
        .Where((c, i) => c != replaceChar || i == lastIndex);
    str = new string(chars.ToArray());
}

デモ

于 2012-12-12T16:23:31.567 に答える
1
  var splitResult = v.Split(new char[] { '.' }).ToList();
  var lastSplit = splitResult.Last();
  splitResult.RemoveAt(splitResult.Count - 1);
  var output = string.Join("", splitResult) + "." + lastSplit;

私はそのようにします。最適な方法が常に最短の方法であるとは限りません。

于 2012-12-12T16:19:45.853 に答える
1

私はそのようにします:

  1. 最後の「.」を検索します ;
  2. 部分文字列 [0 .. indexOfLastDot] ;
  3. '.' をその場で削除します。部分文字列の
  4. 部分文字列を元の文字列の残りの部分と連結します [indexOfLastDot .. 残り]

また

  1. 最後の「.」を検索します
  2. 文字列の列挙された各文字に対して
  3. 「.」の場合 かつ i ≠ indexOfLastDot、削除
于 2012-12-12T16:16:46.590 に答える
1

このようなものがうまくいくはずです。それが「良い」かどうかは別問題です。エラーチェックがないことにも注意してください。null または空の文字列をチェックし、文字列に少なくとも 1 つ含まれていることを確認する"."ことができます。

string numbers = "12.34.56.78";
var parts = String.Split(new char [] {'.'});
string newNumbers = String.Join("",parts.Take(parts.Length-1)
                                        .Concat(".")
                                        .Concat(parts.Last());

これが長い文字列に対して優れたパフォーマンス特性を持つとは言いませんが、Linq を使用しています ;-)

于 2012-12-12T16:24:12.607 に答える
0

ループを使用する必要はありません:

    //string val = "12345678";
    string val = "12.34.56.78";
    string ret = val;
    int index = val.LastIndexOf(".");
    if (index >= 0)
    {
        ret = val.Substring(0, index).Replace(".", "") + val.Substring(index);
    }
    Debug.WriteLine(ret);
于 2012-12-12T16:25:19.497 に答える